2 回答

TA貢獻2011條經驗 獲得超2個贊
嘗試這個:
if varKind == reflect.Struct { iterateStruct(e.Field(i).Interface())}
e.Field(i)
返回Value
結構字段的 。Interface{}
將返回基礎值,因此您可以iterateStruct
使用它調用。

TA貢獻1871條經驗 獲得超13個贊
這是一個處理帶有指向結構的指針的字段、包含結構值的接口等的示例。作為獎勵,這個示例縮進了嵌套結構。
func iterate(v reflect.Value, indent string) {
v = reflect.Indirect(v)
if v.Kind() != reflect.Struct {
return
}
indent += " "
for i := 0; i < v.NumField(); i++ {
varName := v.Type().Field(i).Name
varKind := v.Field(i).Kind()
varType := v.Type().Field(i).Type
varValue := v.Field(i).Interface()
fmt.Printf("%s%v %v %v %v\n", indent, varName, varKind, varType, varValue)
iterate(v.Field(i), indent)
}
}
像這樣稱呼它:
iterate(reflect.ValueOf(s), "")
https://go.dev/play/p/y1CzbKAUvD_w
- 2 回答
- 0 關注
- 128 瀏覽
添加回答
舉報