我正在嘗試通過反射訪問接口中的數(shù)組。在其他字段中,我還有一個字符串?dāng)?shù)組:type?Configuration?struct?{
????...
????SysVars?[]string}我可以像這樣訪問SysVars字段:elem?:=?reflect.ValueOf(conf).Elem()
sysVarsInterface?:=?elem.FieldByName("SysVars").Interface()此時,在使用 GoLand 的調(diào)試器時,我可以看到sysVarsInterface是一個具有我期望的兩個值的接口。由于它是一個數(shù)組,我假設(shè)我需要將它視為接口并再次反映它?所以它看起來像這樣:sysVarsValue?:=?reflect.ValueOf(&sysVarsInterface)
sysVarsElem?:=?sysVarsValue.Elem()但迭代失?。篺or?i:=0;?i<?sysVarsElem.NumField();?i++?{
????vname?:=?sysVarsElem.Type().Field(i).Name
????fmt.Println(vname)
}說:panic:?reflect:?call?of?reflect.Value.NumField?on?interface?Value任何想法我做錯了什么?
1 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊
無需雙重反射,您可以像這樣迭代 SysVars :
p := &Configuration{
SysVars :[]string{"a","b","c"},
}
s:= reflect.ValueOf(p).Elem().FieldByName("SysVars")
for i:=0 ; i< s.Len() ; i++ {
fmt.Println(s.Index(i).String())
}
- 1 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消