为什么在 Golang 中,导入包时使用 := 赋值给导出变量会导致无法访问?
golang 无法访问导入包中的导出变量
在 golang 中,导入包时需要避免在 init 函数中给导出变量使用 := 赋值。这是因为使用 := 赋值时,变量只在局部作用域内存在,无法覆盖全局导出变量。
来看一个示例:
utils.go:
package utils import ( "log" "github.com/elastic/go-elasticsearch/v6" ) // 导出变量 var esclient *elasticsearch.client func init() { // ... 初始化 esclient,类似上面给出的代码 ... fmt.println(esclient) // 输出 esclient 的地址,非 nil }
main.go:
package main import "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 中,导入包时使用 := 赋值给导出变量会导致无法访问?的详细内容,更多请关注其它相关文章!