我正在使用 reflect.ValueOf(..) 循環遍歷結構中的元素。我注意到,如果我將結構與指針傳遞給 ValueOf 函數中的結構,則調用 NumField 會失敗。v = reflect.ValueOf(user)v.NumField() // panics比。v = reflect.ValueOf(*user)v.NumField() // works在調用 NumField 之前,有沒有辦法事先查明 v 是否會恐慌?
2 回答

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
使用reflect.Indirect來處理問題中的兩種情況:
v := reflect.Indirect(reflect.ValueOf(x)) v.NumField()
NumField文檔說:
如果 v 的 Kind 不是 Struct,它會恐慌。
檢查種類以避免恐慌:
if v.Kind() == reflect.Struct { v.NumField() } else { // do something else }
- 2 回答
- 0 關注
- 101 瀏覽
添加回答
舉報
0/150
提交
取消