在获取阿里语音合成的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
目前看到的类似的报错以及解决方法汇总:
“某个指针变量声明之后, 还没有经过赋值时默认指向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
参考:http://www.144d.com/post-614.html
“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
“函数调用时传了一个空值”
“json无法访问我们的结构体里小写字母开头的成员,所以用json.Marshal()和json.Unmarshal()时很可能得到一个空值。”
https://blog.csdn.net/mei2532/article/details/88537233
“改为直接等于就成”
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解码出来的东西确实很奇怪……是我不配看错误码吗?)