2 回答

TA貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊
您可以執(zhí)行以下操作:
log := &Log{} log.Facility, _ = parts["facility"].(int) log.Severity, _ = parts["severity"].(int) ...
這將使用類型斷言的雙值形式,其中第二個值指示類型斷言是否有效,然后忽略該值,因此,如果映射不包含鍵,或者鍵不是必需的類型,則使用零值初始化結(jié)構(gòu)成員。

TA貢獻(xiàn)1848條經(jīng)驗 獲得超6個贊
如果您愿意,可以為這些類型編寫包裝器:
func toInt(x interface{}) int {
if i, ok := x.(int); ok {
return i
}
return 0 // Or what you would like to have as a default.
}
如果要對類型使用默認(rèn)值,則可以縮短:
func toInt(x interface{}) int {
i, _ := x.(int)
return i
}
這將使它看起來像這樣:
log := &Log{
Facility: toInt(parts["facility"]),
Severity: toInt(parts["severity"]),
Timestamp: toTime(parts["timestamp"]),
Hostname: toString(parts["hostname"]),
AppName: toString(parts["appName"]),
Client: toString(parts["client"]),
Priority: toInt(parts["priority"]),
Message: toString(parts["message"]),
}
您可以更進(jìn)一步,在本地編寫轉(zhuǎn)換函數(shù):
var parts map[string]interface{}
// ...
i := func(name string) int {
i, _ := parts[name].(int)
return i
}
s := func(name string) string {
s, _ := parts[name].(string)
return s
}
t := func(name string) time.Time {
t, _ := parts[name].(time.Time)
return t
}
log := &Log{
Facility: i("facility"),
Severity: i("severity"),
Timestamp: t("timestamp"),
Hostname: s("hostname"),
AppName: s("appName"),
Client: s("client"),
Priority: i("priority"),
Message: s("message"),
}
- 2 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報