ホームページ > バックエンド開発 > Golang > 初期化されていないポインターを使用すると、「json.Unmarshal」が「InvalidUnmarshalError」をスローするのはなぜですか?

初期化されていないポインターを使用すると、「json.Unmarshal」が「InvalidUnmarshalError」をスローするのはなぜですか?

Susan Sarandon
リリース: 2024-11-12 09:32:01
オリジナル
554 人が閲覧しました

Why Does `json.Unmarshal` Throw an `InvalidUnmarshalError` When Using an Uninitialized Pointer?

JSON Unmarshal: ポインターと参照

最近、ポインターを渡すときに json.Unmarshal を使用すると予期しない動作が起こることにユーザーが気づきました。違いが存在する理由を調べてみましょう。

公式ドキュメントでは、ポインターが最初に nil の場合に、Unmarshal が指す新しい値を自動割り当てすることを示唆するステートメントに遭遇します。

Unmarshal JSON をポインタが指す値にアンマーシャリングします。ポインタが nil の場合、Unmarshal はポインタが指す新しい値を割り当てます。

ただし、初期化されていないポインタで Unmarshal を使用しようとすると、InvalidUnmarshalError:

// InvalidUnmarshalError が発生します。 Unmarshal に渡される無効な引数について説明します。

// (Unmarshal への引数は非 nil ポインターである必要があります。)

このエラーは、ドキュメントの提案と矛盾します。

この不一致を解決するには、参照とポインターの使用の微妙な違いに対処することが重要です。コードが動作する最初の例では、&animals を使用することで変数への参照が作成され、変数が常に非 nil であることが保証されます。この参照動作は、期待される機能と一致しています。

対照的に、2 番目の例では、初期化されていないポインター (*animals) が使用されており、これは Unmarshal から見て無効な引数を表します。生成されるエラーは、この問題を正確に反映しています。

最後の注意として、公式ドキュメントによると、この単語の正しいスペルは「アンマーシャリング」です。

以上が初期化されていないポインターを使用すると、「json.Unmarshal」が「InvalidUnmarshalError」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート