2015-11-16 36 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