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