未声明的变量,在if..else语句中 [英] Variable not declared, inside a if..else statement

查看:155
本文介绍了未声明的变量,在if..else语句中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚开始学习lang,并且我很困惑于声明变量lang



例如我声明 req , er 在if ... else语句中。

  if strings.EqualFold(r.Method,GET)|| strings.EqualFold(r.Method,){
req,er:= http.NewRequest(r.Method,r.Uri,b)
} else {
req,er: = http.NewRequest(r.Method,r.Uri,b)
}


if er!= nil {
//我们无法解析URL。
return nil,& Error {Err:er}
}

//向请求添加标题
req.Host = r.Host
req.Header.Add(User-Agent,r.UserAgent)
req.Header.Add(Content-Type,r.ContentType)
req.Header.Add(Accept, r.headers!= nil {
for _,header:= range r.headers {
req.Header.Add(header.name,header.value)


但是我的终端出错了

  ./ goreq.go:127:请求声明并未使用
./goreq.go:127:声明并未使用
./goreq.go:129:申请并未使用
./goreq.go:129:已申报并未使用

好像我在里面声明的任何内容If语句不工作......我该如何解决它?

解决方案

因为变量只在声明范围内定义:

  package main 

导入fmt

fu nc main(){
a:= 1
fmt.Println(a)
{
a:= 2
fmt.Println(a)
}
fmt.Println(a)
}

go play


$ b $ < = := 就是 = 只是赋值而:= 是变量声明和分配的语法



这个:

  a:= 1 

相当于:

  var a int 
a = 1

你可能想要的是:

  var req * http.Request 
var er error
如果strings.EqualFold(r.Method,GET)|| strings.EqualFold(r.Method,){
req,er = http.NewRequest(r.Method,r.Uri,b)
} else {
req,er = http .NewRequest(r.Method,r.Uri,b)
}


if er!= nil {
//我们无法解析URL。
return nil,& Error {Err:er}
}

//向请求添加标题
req.Host = r.Host
req.Header.Add(User-Agent,r.UserAgent)
req.Header.Add(Content-Type,r.ContentType)
req.Header.Add(Accept, r.headers!= nil {
for _,header:= range r.headers {
req.Header.Add(header.name,header.value)
}
}


I'm just started learning go lang, and I am confused about declaring variables in go lang

for example I've declare req, er inside if...else statement.

if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") {
    req, er := http.NewRequest(r.Method, r.Uri, b)
} else {
    req, er := http.NewRequest(r.Method, r.Uri, b)
}


if er != nil {
    // we couldn't parse the URL.
    return nil, &Error{Err: er}
}

// add headers to the request
req.Host = r.Host
req.Header.Add("User-Agent", r.UserAgent)
req.Header.Add("Content-Type", r.ContentType)
req.Header.Add("Accept", r.Accept)
if r.headers != nil {
    for _, header := range r.headers {
        req.Header.Add(header.name, header.value)
    }
}

But I've got error from terminal

./goreq.go:127: req declared and not used
./goreq.go:127: er declared and not used
./goreq.go:129: req declared and not used
./goreq.go:129: er declared and not used

seems like anything I declared inside If statement is not working... How can I solved it?

解决方案

Because variables are only defined in the scope in which they are declared:

package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
    {
        a := 2
        fmt.Println(a)
    }
    fmt.Println(a)
}

go play

The difference between = and := is that = is just assignment and := is syntax for variable declaration and assigment

This:

a := 1

is equivalent to:

var a int
a = 1

What you probably want is:

var req *http.Request
var er error
if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") {
    req, er = http.NewRequest(r.Method, r.Uri, b)
} else {
    req, er = http.NewRequest(r.Method, r.Uri, b)
}


if er != nil {
    // we couldn't parse the URL.
    return nil, &Error{Err: er}
}

// add headers to the request
req.Host = r.Host
req.Header.Add("User-Agent", r.UserAgent)
req.Header.Add("Content-Type", r.ContentType)
req.Header.Add("Accept", r.Accept)
if r.headers != nil {
    for _, header := range r.headers {
        req.Header.Add(header.name, header.value)
    }
}

这篇关于未声明的变量,在if..else语句中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆