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

she*_*n89 4 json dictionary go

我正在将一些JSON解码为一个结构,我想处理没有提供特定字段的情况.

结构:

type Config struct {
    SolrHost string
    SolrPort int
    SolrCore string
    Servers  map[string][]int
}
Run Code Online (Sandbox Code Playgroud)

要解码的JSON:

{
  "solrHost": "localhost",
  "solrPort": 8380,
  "solrCore": "testcore",
}
Run Code Online (Sandbox Code Playgroud)

在解码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
}
Run Code Online (Sandbox Code Playgroud)

我可以利用recover()吗?这是实现我的任务的"最好的"方式吗?

Ain*_*r-G 11

任何地图的零值都是nil,所以只需检查它:

if output.Servers == nil { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

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

if len(output.Servers) == 0 { /* ... */ }
Run Code Online (Sandbox Code Playgroud)