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解码出来的东西确实很奇怪……是我不配看错误码吗?)

panic: runtime error: invalid memory address or nil pointer dereference_第1张图片

你可能感兴趣的:(GO,那些我所不了解的新操作)