次のように作成した構造体からjsonの結果を出力しようとしています:
type Machine struct {
m_ip string
m_type string
m_serial string
}
そしてプリントアウト
m:= &Machine{ m_ip:"test", m_type:"test", m_serial:"test" }
m_json:= json.Marshal(m)
fmt.Println(m_json)
ただし、結果は{}のみを返しました
次に、次のように単語の最初の文字を大文字に変更しようとしました。
type Machine struct{
MachIp string
MachType string
MachSerial string
}
そしてそれはうまくいきます!とにかく、先頭に小文字の付いたWordが機能しないのはなぜですか。
Goはケースを使用して、パッケージのコンテキスト内で特定の識別子がパブリックかプライベートかを判断します。最初の例では、フィールドはコードを含むパッケージの一部ではないため、json.Marshal
からは見えません。フィールドを大文字に変更すると、フィールドがパブリックになり、エクスポートできるようになりました。
JSON出力で小文字の識別子を使用する必要がある場合は、必要な識別子でフィールドにタグを付けることができます。例えば:
type Machine struct{
MachIp string `json:"m_ip"`
MachType string `json:"m_type"`
MachSerial string `json:"m_serial"`
}