ホームページ >バックエンド開発 >Golang >Go の「json.Marshal」が小文字のフィールド名を含む構造体で機能しないのはなぜですか?

Go の「json.Marshal」が小文字のフィールド名を含む構造体で機能しないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 07:36:11937ブラウズ

Why Doesn't Go's `json.Marshal` Work with Structs Containing Lowercase Field Names?

なぜ Go は小文字のフィールド名を持つ構造体の JSON 生成に失​​敗するのですか?

まず、Go は大文字と小文字の規則を利用して、パッケージ内のプライベート識別子とパブリック識別子を区別します。提供されている例では、Machine 構造体のフィールド (m_ip、m_type、および m_serial) はプライベートです。したがって、それらが定義されているパッケージの外にある json.Marshal などの外部ライブラリにはアクセスできません。

2 番目のコード スニペットでフィールド名を大文字 (MachIp、MachType、および MachSerial) に変更すると、これらは公開され、エクスポートできるようになります。これにより、json.Marshal は JSON 表現を正常に生成できるようになります。

ただし、小文字のフィールド名を使用したい場合は、フィールド タグを利用して目的の JSON フィールド名を手動で指定できます。例:

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}

フィールドに json タグの注釈を付けることにより、基本的に、JSON 出力の生成中に指定されたフィールド名を利用するように JSON エンコーダーに指示します。

以上がGo の「json.Marshal」が小文字のフィールド名を含む構造体で機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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