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