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

被导入包:

package utils

import (
    "github.com/elastic/go-elasticsearch/v6"
    "log"
)

var EsClient *elasticsearch.Client

func init() {
    host := Cfg.Section("es").Key("host").String()
    if host == "" {
        log.Fatal("es Host 未设置")
    }

    cfg := elasticsearch.Config{
        Addresses: []string{host},
    }

    EsClient, err := elasticsearch.NewClient(cfg)
    if err != nil {
        log.Fatal("连接失败", err)
    }

    _, err = EsClient.Info()
    if err != nil {
        log.Fatalf("连接出错:"+host, err)
    }

    fmt.Println(EsClient) // &{0xc000166000 0xc000162000}
}

main.go

package main

import (
    "data_push/utils"
    "fmt"
)

func main() {
   fmt.Println(utils.EsClient) // 结果为 nil
}

main 函数中输出 utils 包中 EsClient 变量,结果为 nil,但是 utils 包中初始化后值不为 nil,这是什么原因呢?

阅读 1k
1 个回答

因为在 init 函数中,给这个变量使用 := 赋值了,所以实际上在 init 函数里,这个只是一个局部变量,会覆盖全局变量在此函数中的作用域,因此在 main 函数中就变成了 nil

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏