title: golang : Unmarshal: json: cannot unmarshal array into Go value of type main.MonitorServerInfo
body: <p>json: cannot unmarshal array into Go value of type</p>
  
  <p>config json:</p>
  
  <pre><code>{
      "monitor_servers_info":[
              {
                  "server_info":{
                          "host":"127.0.0.1",
                          "port":28081,
                          "magic":"magic0",
                          "params":"all",
                          "interval":10000
                  }
              },
              {
                      "server_info":{
                              "host":"127.0.0.1",
                              "port":28080,
                              "magic":"magic1",
                              "params":"all",
                              "interval":10000
                      }
              }
      ],
  
      "sentry_server":{
          "host":"127.0.0.1",
          "port":80
      },
  
      "deadtime":"110000"
  }
  </code></pre>
  
  <p>and my golang code like this:</p>
  
  <pre><code>type ServerInfo struct {
      Host string     `json:"host"`
      Port int64      `json:"port"`
      Magic string    `json:"magic"`
      Params string   `json:"params"`
      Interval int64  `json:"interval"`
  }
  
  type ServerInfoStrap struct {
      ConnInfo ServerInfo  `json:"server_info"`
  }
  
  type MonitorServerInfo struct {
      Servers []ServerInfoStrap
  }
  
  type SentryServer struct {
      Host string     `json:"host"`
      Port int64      `json:"port"`
  }
  
  type ConfigServer struct {
      ServerInfo  MonitorServerInfo  `json:"monitor_servers_info"`
      ConnServer  SentryServer       `json:"sentry_server"`
      DeadTime    string             `json:"deadtime"`
  }
  </code></pre>
  
  <p>json parse code :</p>
  
  <pre><code>func readFile(filename string) (config ConfigServer, err error) {
      bytes, err := ioutil.ReadFile(filename)
      if err != nil {
          fmt.Println("ReadFile: ", err.Error())
          return
      }
  
      //bytes, err = StripComments(bytes) //去掉注释
      //if err != nil {
      //  log.Info("Failed to strip comments from json: %s\n", err)
      //  return
      //}
  
      //xxx := make(map[string]interface{})
      fmt.Println(string(bytes))
      err = json.Unmarshal(bytes, &amp;config)
      if err != nil {
          fmt.Println("Unmarshal: ", err.Error())
          return
      }
  
      fmt.Println(config)
  
      return
  }
  </code></pre>