为什么我在 GO init() 方法中收到错误?

Why am I getting an error in the GO init() method?

所以我明白了,在go中,init()是一个特殊的方法,可以用来初始化一个包中的对象。当我尝试使用此技术时,我收到一个错误,指出该变量已声明但未使用。例如:

package fizzbuzz

var foo string

func init() {
    foo := "bar"
}

在我看来,您放入此方法的大部分时间变量不会在 int() 本地使用,所以这很好。我错过了什么?

这只是在方法内部创建了一个名为 "foo" 的局部变量。您需要通过 foo = "bar".

将字符串分配给模块范围内已声明的 var

在 Go 中 foo:="bar" 是一个简短的赋值语句,可以在函数中代替 var 声明。

所以基本上你所做的是在 init 方法中声明一个新的 foo 变量而不是使用全局 foo

关键字 := 是 shorthand for "assign to new variable"-- Go 允许您在更深的范围内用新变量隐藏旧变量。

foo 存在于全局范围内,但您在 init() 范围内创建了一个新的 foo——因此,在 init()foo 阴影全局 foo.

此外,Go 会抱怨局部作用域中未使用的变量。在这种情况下,您在 init() 中的 foo 未被使用。

所以,要走过这个,

  • 您在全局范围内定义了foo
  • 您输入了 init(),然后在 init() 中定义了一个 foo,隐藏了全局 foo
  • 您没有使用局部变量foo

如果要设置全局 foo,请使用 =,而不是 :=,因为 := 创建了一个新变量。