【问题标题】:Check if a map is initialised in Golang检查地图是否在 Golang 中初始化
【发布时间】:2015-09-29 02:42:58
【问题描述】:

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

结构:

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()吗?这是完成任务的“最佳”方式吗?

【问题讨论】:

  • 顺便说一句,使用err := json.Unmarshal([]byte(input), output); if err != nil { return err }更简单。

标签: json dictionary go


【解决方案1】:

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

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

或者,您也可以检查它的长度。这也处理了空地图的情况:

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

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2015-05-23
    • 2019-01-25
    • 2016-09-21
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多