構造体を JSON にマーシャリングしようとすると、開発者は予期しない問題に遭遇する可能性があります。結果は空のオブジェクトとして返されます。この動作は、Go がプライベート識別子とパブリック識別子を区別するために大文字と小文字を使用することに由来しています。
この例では、構造体 Machine には小文字の先頭文字を持つフィールドがあります。
type Machine struct { m_ip string m_type string m_serial string }
デフォルトでは、Go先頭文字が小文字の識別子はプライベートとみなされます。これは、Machine 内のフィールドがコードと同じパッケージの一部ではないため、json.Marshal には表示されないことを意味します。
この問題を解決するには、開発者はフィールド名を大文字に変更することを選択できます。 public:
type Machine struct { MachIp string MachType string MachSerial string }
ただし、開発者が JSON 出力で小文字の識別子を維持したい場合は、JSON を利用できます。 tags:
type Machine struct { MachIp string `json:"m_ip"` MachType string `json:"m_type"` MachSerial string `json:"m_serial"` }
たとえば json:"m_ip" を MachIp フィールドに追加すると、結果として得られる JSON には目的の小文字の識別子が含まれます。これは、JSON タグがデフォルトのケースの動作をオーバーライドするために実現されます。
以上がGo の「json.Marshal」に小文字の名前を持つ構造体フィールドが含まれていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。