Go 未声明变量,在if..else语句中
我刚刚开始学习go-lang,我对在go-lang中声明变量感到困惑 例如,我在if…else语句中声明了Go 未声明变量,在if..else语句中,go,global-variables,Go,Global Variables,我刚刚开始学习go-lang,我对在go-lang中声明变量感到困惑 例如,我在if…else语句中声明了req,er 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) }
req
,er
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)
}
}
但我收到了来自终端的错误信息
./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
如果语句不起作用,我在里面声明的内容似乎都一样。。。如何解决它?因为变量只在声明它们的范围内定义:
package main
import "fmt"
func main() {
a := 1
fmt.Println(a)
{
a := 2
fmt.Println(a)
}
fmt.Println(a)
}
=
和:=
之间的区别在于=
只是赋值,而:=
是变量声明和赋值的语法
这:
相当于:
var a int
a = 1
您可能想要的是:
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
条件内声明了变量req
和er
,并试图在范围外使用它(范围只是声明它们的if
和else
)
您需要在
if-else
之外声明er
和req
,if-else我对go
知之甚少,但是如果您在if语句之前声明req
和er
,并在if语句中分配它们,那么警告(它们是警告还是错误?)应该离开。在go中,将错误结果命名为err
,而不是er
,这是一种习惯用法。谢谢您的回复,那么我如何才能将变量传递出范围?您不必传递任何内容,只需在正确的位置声明即可。谢谢!这就是我想要的!我会接受答案的。谢谢你的帮助!!这太愚蠢了,我总是需要如果a,err:=xxx();呃=nil{return err}a.yyy()
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)
}
}