Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why Golang cannot generate json from struct with front lowercase character?

Tags:

go

goroutine

I am trying to print json result from struct I created as following:

type Machine struct {   m_ip string   m_type string   m_serial string } 

and print out

m:= &Machine{ m_ip:"test", m_type:"test", m_serial:"test" } m_json:= json.Marshal(m) fmt.Println(m_json) 

However, result returned just {}

Secondly,I tried to changed the first letter of words to Uppercase as follow:

type Machine struct{   MachIp string   MachType string   MachSerial string } 

and it works! Why doesn't the word with lowercase character at the front work, anyway?

like image 939
A-letubby Avatar asked Feb 17 '14 09:02

A-letubby


1 Answers

Go uses case to determine whether a particular identifier is public or private within the context of your package. In your first example, the fields are not visible to json.Marshal because it is not part of the package containing your code. When you changed the fields to be upper case, they became public so could be exported.

If you need to use lower case identifiers in your JSON output though, you can tag the fields with the desired identifiers. For example:

type Machine struct{     MachIp     string `json:"m_ip"`     MachType   string `json:"m_type"`     MachSerial string `json:"m_serial"` } 
like image 137
James Henstridge Avatar answered Sep 21 '22 13:09

James Henstridge