因此,我了解到init()是一种特殊的方法,可用于初始化包中的对象。当我尝试使用此技术时,出现错误,该变量已声明且未使用。例如:
package fizzbuzz
var foo string
func init() {
foo := "bar"
}
在我看来,您在此方法中放置的大多数时间变量都不会在int()本地使用,所以就很好了。我想念什么?
答案 0 :(得分:3)
这只会在方法内部创建一个名为“ foo”的局部变量。您需要通过foo =“ bar”将字符串分配给模块范围内已声明的var。
答案 1 :(得分:0)
In Go foo:="bar"
是一个简短的赋值语句,可以在函数中使用,代替var
声明。
因此,基本上,您要做的是在foo
方法内声明一个新的init
变量,而不是使用全局foo
答案 2 :(得分:0)
关键字:=
是“分配给新变量”的简写-Go使您可以在更深的范围内用新变量对旧变量进行阴影处理。
foo
存在于全局范围内,但是您已经在foo
范围内创建了一个新的init()
-因此,在init()
内,{{1} }遮盖了全局foo
。
此外,Go抱怨本地范围内的未使用变量。在这种情况下,您在foo
中的foo
未被使用。
所以,要遍历这一点,
init()
foo
,然后在init()
内定义了foo
,从而遮盖了全局init()
foo
。如果要设置全局foo,请使用foo
而不是=
,因为:=
会创建一个新变量。