处理地图中的nil值

我想用地图中的值创建一个结构。

这是一个片段:

        log := &Log{
            Facility:  parts["facility"].(int),
            Severity:  parts["severity"].(int),
            Timestamp: parts["timestamp"].(time.Time),
            Hostname:  parts["hostname"].(string),
            AppName:   parts["appName"].(string),
            Client:    parts["client"].(string),
            Priority:  parts["priority"].(int),
            Message:   parts["message"].(string),
        }

问题是,如果其中一个值为 nil,则会发生恐慌。所以我想做这样的事情:

Facility:  parts["facility"] != nil ? parts["facility"].(int) : 0

但这不是有效的语法。

我是否必须分别检查每个键才能处理零情况?

回答

你可以这样做:

 log := &Log{}
 log.Facility, _ = parts["facility"].(int)
 log.Severity, _ = parts["severity"].(int)
  ...

这将使用类型断言的双值形式,其中第二个值指示类型断言是否有效,然后您忽略该值,因此如果映射不包含键,则结构成员用零值初始化,或者如果密钥不是所需的类型。


以上是处理地图中的nil值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>