这很好用:
package main
var foo string
func main() {
fn := func() {
foo = "AAA"
}
fn()
}
但是如果我们将变量声明移到里面
main()
:
package main
func main() {
var foo string
fn := func() {
foo = "AAA"
}
fn()
}
——然后它咆哮“声明了 foo 但未使用”。
为什么会这样?
编译器可以在第二种情况下看到对 foo 的赋值完全没有意义。分配的结果永远不会被读取。如果没有它,代码也能正常工作。它试图提供帮助。
在第一种情况下,编译器无法确定 foo 作为全局变量没有在其他地方使用。
尽管一些现代编译器也可以发现这一点,并警告变量是否被分配但从未使用过或更糟糕的是在分配之前使用过(或者在代码中存在一条可能发生这种情况的路径)。