1 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
Value.IsZero()
報(bào)告包裝的值是否是其類型的零值。這與reflect.Value
自身為零(reflect.Value
其零值是結(jié)構(gòu))不同。
另請(qǐng)注意,t
在您的代碼中不是結(jié)構(gòu)值,它是指向結(jié)構(gòu)的指針。用于Value.Elem()
導(dǎo)航到包裝的結(jié)構(gòu)值(或不從指針開始)。
如果該字段不存在,Value.FieldByName()
則返回 的零值reflect.Value
,而不是reflect.Value
持有某種類型的零值的非零值;如果找不到字段,則沒有類型信息。
因此,要檢查該字段是否不存在,請(qǐng)reflect.Value
通過將其與以下內(nèi)容進(jìn)行比較來檢查其本身是否為零reflect.Value{}
:
if field == (reflect.Value{}) {
log.Printf("Field %s was not on the struct", name)
}
測(cè)試它:
type test struct {
A bool
B bool
x bool
}
v := new(test)
metaValue := reflect.ValueOf(v).Elem()
for _, name := range []string{"A", "x", "y"} {
field := metaValue.FieldByName(name)
if field == (reflect.Value{}) {
log.Printf("Field %s was not on the struct", name)
}
}
這將輸出(在Go Playground上嘗試):
2009/11/10 23:00:00 Field y was not on the struct
- 1 回答
- 0 關(guān)注
- 115 瀏覽
添加回答
舉報(bào)