变量未声明,在 if.else 语句内



我刚刚开始学习 go lang,我对在 go lang 中声明变量感到困惑

例如,我已经声明了reqer里面如果...否则声明。

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)
}

去玩

=:=之间的区别在于=只是赋值,:=是变量声明和别名的语法

这:

a := 1

相当于:

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条件内声明了变量reqer,并尝试在作用域之外使用它(作用域只是声明它们的ifelse)。

您需要在if else之外声明erreq

相关内容

  • 没有找到相关文章

最新更新