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

在获取阿里语音合成的token的时候遇到如下问题:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x40 pc=0xdbcc77]

goroutine 1 [running]:
main.Ali.AliSyn(0xc0001b80d0, 0x0, 0x0)
	D:/SOFTware/GoLand/GoProject/test.go:196 +0x11b7
main.main()
	D:/SOFTware/GoLand/GoProject/test.go:232 +0x225

目前看到的类似的报错以及解决方法汇总:

1.使用指针

“某个指针变量声明之后, 还没有经过赋值时默认指向nil, 直接调用指针就会报错”

参考:https://blog.csdn.net/m0_37422289/article/details/102677610

 

初始化指针,指针变量的地址为0xc00009a008, 指针值为nil
此时,i为nil,系统没有给*i分配地址,相当于给一个nil地址赋值,肯定会出错

解决办法是,预先分配一个内存地址给到指针变量

参考:http://www.pangxieke.com/go/go-invalid-memory-address-or-nil-pointer-dereference.html

 

“只有它们分配了内存,才可以赋值,如果我们给索引0赋值,运行的时候,会提示无效内存或者是一个nil指针引用。”

参考:https://blog.csdn.net/weixin_37887248/article/details/86219850

 

“类似这样的声明语句但是没有完成初始化就调用对象方法或者访问对象变量, 检查代码中是否有这类问题即可”

参考:https://blog.csdn.net/m0_37422289/article/details/102677610

 

2.变量重复定义

参考:http://www.144d.com/post-614.html

 

3.defer的位置

“The defer only defers the function call. The field and method are accessed immediately.”

参考:https://stackoverflow.com/questions/16280176/go-panic-runtime-error-invalid-memory-address-or-nil-pointer-dereference

 

4.有空值

“函数调用时传了一个空值”

“json无法访问我们的结构体里小写字母开头的成员,所以用json.Marshal()和json.Unmarshal()时很可能得到一个空值。”

https://blog.csdn.net/mei2532/article/details/88537233

 

5.覆盖了全局变量

“改为直接等于就成”

https://blog.csdn.net/qq_35550353/article/details/107321299

 

不过以上原因目前都没有解决我的……

截取部分代码:

res, err := http.PostForm(TOKEN_url, FeToken)
//https://www.coder4.com/archives/7175
//另一种写法
robots, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
	log.Fatal(err)
	//panic(err)
}

刚刚发现可以通过加一组判断err解决,如下:

res, err := http.PostForm(TOKEN_url, FeToken)
if err != nil {
	log.Fatal(err)
	//panic(err)
}
//https://www.coder4.com/archives/7175
//另一种写法
robots, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
	log.Fatal(err)
	//panic(err)
}

 

 

补充:有关fatal和panic

https://ask.csdn.net/questions/1035673

http://www.bluesd7.com/%E8%93%9D%E5%BD%B1%E9%97%AA%E7%94%B5%E7%9A%84%E9%9A%8F%E7%AC%94/contentid/164/go-golang-%E5%85%B3%E4%BA%8E%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86panic%E5%92%8Clog-fatal%E7%9A%84%E5%8C%BA%E5%88%AB

(另外,我发现json解码出来的东西确实很奇怪……是我不配看错误码吗?)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值