在这一个上敲我的头。我无法获得分配给结构的HTTP响应。
我的结构设置如下:
type DataConnect struct {
Response *Response
}
type Response struct {
response []byte
errors []string
}
然后,所讨论的功能就像这样(为了便于阅读而修剪):
137 func (d *DataConnect) send() bool {
...
154 out, err := ioutil.ReadAll(resp.Body)
155 if err != nil {
156 fmt.Println(err)
157 }
158
159 fmt.Printf("%s\n", out) // THIS WORKS
160 d.Response.response = out // THIS DOES NOT WORK
161 }
这样做会导致以下错误:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x36532]
goroutine 1 [running]:
github.com/DataConnect.(*DataConnect).send(0xc2000af4a0, 0x232a00)
github.com/DataConnect/DataConnect.go:160 +0xc22
现在,如果我将DataConnect.Response.response
更改为interface{}
,我可以成功保存到它,但是我需要[]byte
,因为稍后我将对内容进行json.Unmarshal。
有人知道为什么这不起作用吗?
答案 0 :(得分:2)
我怀疑d为n或d.Response在第160行为零。如果确实如此,则需要确定是否合适,如果不是,则更改代码。
答案 1 :(得分:0)
我怀疑@alex是正确的,将代码更改为查找nil的内容(来自第159行):
fmt.Printf("%s\n", out) // THIS WORKS
if d != nil && d.Response != nil {
d.Response.response = out // THIS DOES NOT WORK
} else {
// appropriate error logging and handling
}