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

问题描述 投票:-1回答:3

所以我理解,在go中,init()是一种特殊的方法,可用于初始化包中的对象。当我尝试使用这种技术时,我得到一个错误,即声明变量并且不使用它。例如:

package fizzbuzz

var foo string

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

在我看来,你在这个方法中放置的大多数时间变量都不会在int()本地使用,所以这很好。我错过了什么?

go init
3个回答
3
投票

这只是在方法中创建一个名为“foo”的局部变量。您需要通过foo =“bar”将字符串分配给模块范围内已声明的var。


0
投票

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

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


0
投票

关键字:=是“赋值给新变量”的简写 - Go允许您使用更深范围内的新变量来隐藏旧变量。

foo存在于全球范围内,但你在foo范围内创建了一个新的init()--因此,在init()内部,foo影响全球foo

此外,Go抱怨本地范围中未使用的变量。在这种情况下,foo中的init()未使用。

所以,走过这个,

  • 您在全局范围内定义了foo
  • 你进入了init(),然后在foo中定义了一个init(),阴影全球foo
  • 你没有使用局部变量foo

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

© www.soinside.com 2019 - 2024. All rights reserved.