2 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
嘗試這個(gè):
if varKind == reflect.Struct { iterateStruct(e.Field(i).Interface())}
e.Field(i)
返回Value
結(jié)構(gòu)字段的 。Interface{}
將返回基礎(chǔ)值,因此您可以iterateStruct
使用它調(diào)用。

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
這是一個(gè)處理帶有指向結(jié)構(gòu)的指針的字段、包含結(jié)構(gòu)值的接口等的示例。作為獎(jiǎng)勵(lì),這個(gè)示例縮進(jìn)了嵌套結(jié)構(gòu)。
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 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)