参照とポインターへのアンマーシャリング
JSON データを Go 構造体に逆シリアル化するプロセスでは、json.Unmarshal 関数が重要な役割を果たします。ただし、ユーザーが参照とポインターにアンマーシャリングしようとすると、不一致が発生する可能性があります。
次のコード スニペットを検討してください。
// Unmarshaling into a reference variable var animals Animal err := json.Unmarshal(jsonBlob, &animals)
このコードは、JSON データを動物参照変数にアンマーシャリングします。
ただし、ポインター変数にアンマーシャルしようとすると、別の結果が生じます:
// Unmarshaling into a pointer variable var animals *Animal err := json.Unmarshal(jsonBlob, animals)
この場合、アンマーシャルは不明瞭なエラーで失敗します: "json: Unmarshal(nil *main.Animal )」。このエラーは、animals が初期化されていないポインタであるために発生します。
Unmarshal のドキュメントには、「ポインタが nil の場合、Unmarshal はポインタが指す新しい値を割り当てる」と記載されています。ただし、エラー メッセージに示されているように、この動作は初期化されていないポインターの場合には当てはまらないようです。
この問題を解決するには、アンマーシャリングを試みる前にポインター変数 Animals を初期化することをお勧めします。
animals = &Animal{} err := json.Unmarshal(jsonBlob, animals)
この変更により、アンマーシャリング プロセスは成功するはずです。
ドキュメントでは、「アンマーシャリング」という用語が一貫して使用されていることに注意してください。
以上がGo で初期化されていないポインターへのアンマーシャリングが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。