本文介绍了未声明的变量,在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)
}
$ 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) }
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语句中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!