登录
首页 >  Golang >  Go问答

我为什么在GO语言的init()函数中遇到问题?

来源:stackoverflow

时间:2024-03-08 13:03:27 314浏览 收藏

你在学习Golang相关的知识吗?本文《我为什么在GO语言的init()函数中遇到问题?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

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

package fizzbuzz

var foo string

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

在我看来,大多数情况下,您放入此方法中的变量不会在 int() 本地使用,所以这很好。我错过了什么?


解决方案


关键字 := 是“分配给新变量”的简写——Go 允许您在更深的范围内用新变量隐藏旧变量。

foo 存在于全局范围内,但您已在 init() 范围内创建了新的 foo - 因此,在 init() 内部,foo 会遮蔽全局 foo

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

所以,为了解决这个问题,

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

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

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

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>