2015-11-16 73 views
1

嗨,我想學習golang我正在創建自己的項目,這需要創建結構,我有困難的時候寫和initalized。如果有人能幫助我,我會很感激。在golang中用neast和數組創建高級結構

{ 
    "name":"message", 
    "args":[ 
     { 
      "method":"joinChannel", 
      "params":{ 
       "channel":"CHANNEL", 
       "name":"USERNAME", 
       "token":"XXXX", 
       "isAdmin":false 
      } 
     } 
    ] 
} 

我正在尋找谷歌的一些例子,但只有我能找到的東西是easie。這就是我想出的

type Channel struct { 
    Name string `json:"name"` 
    Args []struct { 
     Method string `json:"method"` 
     Params struct { 
      Channel string `json:"channel"` 
      Name string `json:"name"` 
      Token string `json:"token"` 
      Isadmin bool `json:"isAdmin"` 
     } `json:"params"` 
    } `json:"args"` 
} 

有沒有更透明的方法來做到這一點?

+3

我個人認爲這是一個很多更清晰,如果你不符合定義嵌套類型。 IE你可以定義一個'Arg'類型和一個'Params'類型然後在這裏它會有'Args [] Arg',但那只是我。 – evanmcdonnal

+0

我該如何做到這一點,對不起,我真的是新手:< – user3398940

+0

不是問題,我只是張貼了擴展類型聲明作爲答案。 – evanmcdonnal

回答

1

如果你想打破這些類型,而不是讓這些匿名聲明內聯,它會看起來像這樣;

type Channel struct { 
    Name string `json:"name"` 
    Args []Arg `json:"args"` 
} 

type Arg struct { 
    Method string `json:"method"` 
    Params Params `json:"params"` 
} 

type Params struct { 
     Channel string `json:"channel"` 
     Name string `json:"name"` 
     Token string `json:"token"` 
     Isadmin bool `json:"isAdmin"` 
} 


myChan := Channel{"Name", []Arg{ Arg{"Method", Params{ "Channel", "Name", "Token", true } } } } 
+0

非常感謝,如果這不是很多,我還有一個問題,我怎麼能初始化這個結構? – user3398940

+0

@ user3398940當然。這不是一個可讀的例子,但足以給你基本的想法。您也可以初始化相互獨立的項目,然後在初始化「Channel」實例時將'[] Arg'分配給'Args'。 – evanmcdonnal