检查是否在Golang中初始化了地图

时间:2015-07-10 11:07:59

标签: json dictionary go

我将一些JSON解码为结构体,并且我想处理未提供特定字段的情况。

STRUCT:

type Config struct {
    SolrHost string
    SolrPort int
    SolrCore string
    Servers  map[string][]int
}

要解码的JSON:

{
  "solrHost": "localhost",
  "solrPort": 8380,
  "solrCore": "testcore",
}

在解码JSON的方法中,我想检查map[string][]int是否已初始化,如果没有,请执行此操作。

当前代码:

func decodeJson(input string, output *Config) error {
    if len(input) == 0 {
        return fmt.Errorf("empty string")
    }
    decoder := json.NewDecoder(strings.NewReader(input))
    err := decoder.Decode(output)
    if err != nil {
        if err != io.EOF {
            return err
        }
    }

    // if output.Server.isNotInitialized...

    return nil
}

我可以使用recover()吗?这是"最好的"如何实现我的任务?

1 个答案:

答案 0 :(得分:10)

任何地图的zero value都是nil,所以请检查一下:

if output.Servers == nil { /* ... */ }

或者,您也可以检查其长度。这也处理空映射的情况:

if len(output.Servers) == 0 { /* ... */ }