为什么在 Golang 中,导入包时使用 := 赋值给导出变量会导致无法访问?

为什么在 golang 中,导入包时使用 := 赋值给导出变量会导致无法访问?

golang 无法访问导入包中的导出变量

在 golang 中,导入包时需要避免在 init 函数中给导出变量使用 := 赋值。这是因为使用 := 赋值时,变量只在局部作用域内存在,无法覆盖全局导出变量。

来看一个示例:

utils.go:

立即学习“go语言免费学习笔记(深入)”;

package utilsimport (    "log"    "github.com/elastic/go-elasticsearch/v6")// 导出变量var esclient *elasticsearch.clientfunc init() {    // ... 初始化 esclient,类似上面给出的代码 ...    fmt.println(esclient) // 输出 esclient 的地址,非 nil}

登录后复制

main.go:

package mainimport "data_push/utils"func main() {    fmt.println(utils.esclient) // 输出 nil}

登录后复制

在 utils.go 的 init 函数中,给 esclient 变量使用了 := 赋值,导致 esclient 成了局部变量,仅在本函数内有效。因此,在 main.go 中,输出的 esclient 为 nil。

正确的做法是:

func init() {    // ... 初始化 EsClient,类似上面给出的代码 ...    EsClient = client // 覆盖全局导出变量}

登录后复制

这样,init 函数将全局导出变量 esclient 的值替换为新值,在 main.go 中就可以正确的访问到这个变量。

以上就是为什么在 Golang 中,导入包时使用 := 赋值给导出变量会导致无法访问?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2314345.html

(0)
上一篇 2025年2月28日 13:53:11
下一篇 2025年2月23日 20:00:19

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论