Void の解明: Go のアンマーシャリング プロセスにおける未定義フィールドの認識
JSON データを Go 構造体にアンマーシャリングする際、空の値と未指定のフィールドを区別するデータの不整合を処理するために不可欠な場合があります。次の例を考えてみましょう:
var jsonBlob = []byte(`[ {"Name": "A", "Description": "Monotremata"}, {"Name": "B"}, {"Name": "C", "Description": ""} ]`) type Category struct { Name string Description string } var categories []Category err := json.Unmarshal(jsonBlob, &categories) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", categories)
このコードを実行すると、次の出力が生成されます:
[ {Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:} ]
ご覧のとおり、未定義の "Description" フィールド ( 「カテゴリ B」の場合)と空の「説明」フィールド(「カテゴリ C」の場合)。このあいまいさにより、プログラムが正しく動作しない可能性があります。
解決策: ポインターを使用して区別する
この課題を克服するには、フィールドの型をポインターになるように変更します。 JSON データに空の文字列値が含まれている場合は、空の文字列へのポインターが作成されます。ただし、フィールドが JSON データに存在しない場合は、nil のままになります。
type Category struct { Name string Description *string }
この変更により、更新された出力は次のようになります。
[ {Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158} ]
これで、簡単に実行できます。空の値と未指定のフィールドを区別します。非 nil ポインターは空の値を示し、nil ポインターはフィールドが JSON データに存在しなかったことを示します。これにより、プログラム内でこれらのケースを別の方法で処理し、データの正確性と適切な動作を確保できるようになります。
以上がGo で JSON をアンマーシャリングするときに空のフィールドと未定義のフィールドを区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。