panic: runtime error: invalid memory address or nil pointer dereference

背景

  • 语言:Go
  • 事件:连接Elasticsearch报错
  • 详情如下:
var client *elastic.Client
var host = "http://192.168.191.128:9200/"

func init() {
	errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
	//var err error
	client, err := elastic.NewClient(elastic.SetErrorLog(errorlog), elastic.SetURL(host))
	if err != nil {
		panic(err)
	}
}

原因

由于client定义在函数外,赋值时使用了:=(因为err未定义)。
所以导致新建了client,覆盖了外部的client
运行完init后,在其他函数中得到的client就是nil了。

验证

package main
import (
	"fmt"
	"strconv"
)

var a int

func Test(){
	a,err:=strconv.Atoi("11")
	if err != nil{
		panic(err)
	}
	fmt.Printf("Test()中 a=%d\n",a)
}
func main() {
	Test()
	fmt.Printf("main()中 a=%d\n",a)
}

输出:

Test()中 a=11
main()中 a=0

得出结论

先定义再使用err,不使用:=


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值