1

これに頭をぶつけます。構造体に割り当てる 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 を実行するために必要です。

なぜこれが機能しないのか、誰にもわかりませんか?

4

2 に答える 2

2

160 行目で d が nil か d.Response が nil であると思われます。それが正しい場合は、それが適切かどうかを判断し、そうでない場合はコードを変更する必要があります。

于 2013-09-11T23:46:55.267 に答える