为什么我在 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,请使用 =
,而不是 :=
,因为 :=
创建了一个新变量。
所以我明白了,在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,请使用 =
,而不是 :=
,因为 :=
创建了一个新变量。