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.

Reply via email to