去声明和不使用逻辑

时间:2018-11-21 16:53:45

标签: go

以这个非常简单的例子为例。显示了变量在块中的分配。

编译时,结果为: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设置为我们喜欢的值。这怎么可能?

1 个答案:

答案 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在此块之后没有更改。