ホームページ >バックエンド開発 >Golang >Go の「json.Marshal」に小文字の名前を持つ構造体フィールドが含まれていないのはなぜですか?

Go の「json.Marshal」に小文字の名前を持つ構造体フィールドが含まれていないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-25 01:21:11251ブラウズ

Why Doesn't Go's `json.Marshal` Include Struct Fields with Lowercase Names?

Golang が小文字の頭文字を含む構造体から JSON を生成できないのはなぜですか?

構造体を 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。