处理地图中的 nil 值

Élo*_*tit 0 go

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

这是一个片段:

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

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

Facility:  parts["facility"] != nil ? parts["facility"].(int) : 0
Run Code Online (Sandbox Code Playgroud)

但这不是有效的语法。

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

Bur*_*dar 6

你可以这样做:

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

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