被导入包:
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,这是什么原因呢?
因为在 init 函数中,给这个变量使用 := 赋值了,所以实际上在 init 函数里,这个只是一个局部变量,会覆盖全局变量在此函数中的作用域,因此在 main 函数中就变成了 nil