以这个非常简单的例子为例。显示了变量在块中的分配。
编译时,结果为:u declared and not used
var u string
{
u, err := url.Parse("http://bing.com/search?q=dotnet")
if err != nil {
log.Fatal(err)
}
}
log.Debug(u)
这模拟了一个逻辑块,在此期间我们可能会评估几件事,并根据逻辑评估将var设置为我们喜欢的值。这怎么可能?
答案 0 :(得分:0)
请注意:
u, err := url.Parse("http://bing.com/search?q=dotnet")
在此代码行中,您具有块范围变量u
,该变量与在行var u string
中声明的变量不同,因此出现此错误。
此外,这里的变量u
在外部块作用域中具有阴影,可能会导致错误,请参见:
var u string
u = "blank"
{
u, err := url.Parse("http://bing.com/search?q=dotnet")
if err != nil {
log.Fatal(err)
}
log.Printf("%#v", u)
}
log.Printf("%#v", u)
结果将是:
2018/11/21 19:12:33 &url.URL{Scheme:"http", Opaque:"", User:(*url.Userinfo)(nil), Host:"bing.com", Path:"/search", RawPath:"", ForceQuery:false, RawQuery:"q=dotnet", Fragment:""}
2018/11/21 19:12:33 "blank"
正如您在这里看到的,您甚至具有不同的数据类型,并且变量u
在此块之后没有更改。