Go で小文字のプレフィックスを持つ構造体フィールドの JSON 生成制限を調べる
Go では、開発者が次から JSON を生成しようとすると、頻繁に問題が発生します。小文字のプレフィックス文字を持つフィールドを持つ構造体。この問題を効果的に解決するには、根本的な理由を理解することが重要です。
この問題は、パッケージ内の公開識別子を識別するための Go の規則によって発生します。頭文字が大文字の識別子はパブリックとみなされ、パッケージの外部からアクセスできます。逆に、頭文字が小文字の識別子はプライベートとみなされ、現在のパッケージ内でのみ表示されます。
次のコード スニペットを検討してください。
type Machine struct { m_ip string m_type string m_serial string }
のインスタンスから JSON を生成しようとする場合json.Marshal() を使用してこの構造体を作成すると、「{}」だけの予期しない結果が発生する可能性があります。これは、フィールド m_ip、m_type、および m_serial がプライベート (小文字のプレフィックスで示されている) と見なされるため、json.Marshal() には表示されないためです。
ただし、以下に示すように、フィールドを大文字に変更すると、で問題が解決されます:
type Machine struct { MachIp string MachType string MachSerial string }
大文字の接頭辞を利用することで、これらのフィールドをパブリックにアクセスできるようになり、 json.Marshal() を使用して、目的の JSON 出力を正常に生成します。
JSON 出力で小文字の識別子が必要な場合は、フィールドのタグ付けを使用できます。各フィールドに対応する JSON 名を注釈として付けることで、デフォルトの動作をオーバーライドできます。例:
type Machine struct { MachIp string `json:"m_ip"` MachType string `json:"m_type"` MachSerial string `json:"m_serial"` }
このタグ付けメカニズムを通じて、最初の文字の大文字と小文字に関係なく、目的の JSON フィールド名を明示的に指定できるため、アプリケーションの要件に合わせた JSON 出力を作成できます。
以上がGo の「json.Marshal()」が小文字のプレフィックスを使用して構造体フィールドをシリアル化しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。