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