举一个非常简单的例子。其示出了块内和块外的变量分配。
在编译时,这导致: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设置为我们喜欢的值。这怎么可能?
请注意:
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
在这个块之后没有改变。