在条件语句内声明的变量
您遇到了一个问题,即条件语句(if...else)中声明的变量没有被执行认可。这是因为 Go 中的变量具有特定的作用域,该作用域由声明它们的块定义。
变量作用域
在您的示例中,您声明req 和 er 在条件语句的分支内。然而,这意味着这些变量仅在那些特定分支中可见。 Go 要求您在打算使用变量的范围内声明变量。
解决方案
要解决此问题,请在条件语句之外声明 req 和 er,以便它们在整个函数中都是可见的:
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) } }
理解语法
Go 中 = 和 := 之间的区别很重要。 = 用于为现有变量赋值,而 := 用于在同一行中声明和赋值变量。
这意味着如果您使用 = 声明变量,则必须已经声明过它在同一作用域或父作用域中,而 := 在单个语句中声明并初始化变量。
在这种情况下,因为您想在函数内引入新变量,所以 :=是要使用的适当语法。
以上是为什么我无法访问 Go 中条件语句内声明的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!