为什么我在GO init()方法中出现错误?

时间:2019-04-12 23:44:17

标签: go init

因此,我了解到init()是一种特殊的方法,可用于初始化包中的对象。当我尝试使用此技术时,出现错误,该变量已声明且未使用。例如:

package fizzbuzz

var foo string

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

在我看来,您在此方法中放置的大多数时间变量都不会在int()本地使用,所以就很好了。我想念什么?

3 个答案:

答案 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而不是=,因为:=会创建一个新变量。