On Tue, Aug 22, 2017 at 11:09 AM, Tong Sun wrote: > First of all, thanks a lot for your solution andrey! > > Let me explain what I'm trying to do --- I'm trying to covert my struct > into map with github.com/fatih/structs > https://groups.google.com/d/msg/golang-nuts/eyYnelZF1zo/Z0IPBcArCwAJ > > but the following gave me "panic: not struct" > > type Server struct { > Name string > ID int32 > Enabled bool > } > > s := []Server{ > { > Name: "Arslan", > ID: 123456, > Enabled: true, > }, > { > Name: "Arslan", > ID: 123456, > Enabled: true, > }, > } > > m := structs.Map(s) > > That's why I'm wrapping a slice under a struct to make it works *for my > "map[string]interface {}" data*. > > > > On Tue, Aug 22, 2017 at 10:48 AM, Konstantin Khomoutov wrote: > >> On Tue, Aug 22, 2017 at 07:38:03AM -0700, Tong Sun wrote: >> >> > How to initialize a go struct like the following? >> > >> > type Server struct { >> > Name string >> > ID int32 >> > Enabled bool >> > } >> >> This type definition looks pretty much OK. >> >> > s := struct { >> > Servers []Server{ >> > { >> > Name: "Arslan", >> > ID: 123456, >> > Enabled: true, >> > }, >> > { >> > Name: "Arslan", >> > ID: 123456, >> > Enabled: true, >> > }, >> > } >> > } >> >> ...and this is a very strange idea: struct types contain fixed number >> of named fields, so >> >> s := struct{ >> // what's this? >> } >> >> > That didn't work so I tried to introduce a new type to capture it: >> > >> > type Server struct { >> > Name string >> > ID int32 >> > Enabled bool >> > } >> > type Servers struct { >> > servers []Server >> > } >> >> This is possible but arguably don't needed. >> If all you need is merely a slice of Server instances, >> just use it. >> >> > s := &Servers{servers: []Server{ >> > { >> > Name: "Arslan", >> > ID: 123456, >> > Enabled: true, >> > }, >> > { >> > Name: "Arslan", >> > ID: 123456, >> > Enabled: true, >> > }, >> > } >> > >> > but that failed also. >> > >> > What's the correct way? >> >> In the simplest case: >> >> s := []Server{ >> Server{ >> Name: "Arslan", >> ID: 123456, >> Enabled: true, >> }, >> ... >> } >> >> If you need your nested structs, then >> >> s := Servers{ >> servers: []Server{ >> Server{ >> Name: "Arslan", >> ID: 123456, >> Enabled: true, >> }, >> ... >> } >> } >> > >
Hi Konstantin, I tried your above solution, but why it is not printing what I want? https://github.com/suntong/lang/blob/820cf694de6b099256f429b9fff91265461eef25/lang/Go/src/ds/structs_example.go#L131-L147 that prints: map[string]interface {}{} while the previous test prints the following, which is what I want: map[string]interface {}{"Servers":[]main.Server{main.Server{Name:"Arslan", ID:123456, Enabled:true}, main.Server{Name:"Arslan", ID:123456, Enabled:true}}} How to fix it to make it working? Thanks -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.