我很新,我试图遍历界面的每个字段(可以是不同的结构)但我不确定下面的代码出了什么问题?它报告运行时错误:panic:reflect.Value.Interface:无法返回从未导出的字段或方法获得的值
那些未导出的领域/方法是什么?我有SomeField字段大写谢谢
type SomeStruct struct {
SomeField uint32
}
func test(obj interface{}){
typ := reflect.TypeOf(obj)
val := reflect.ValueOf(obj)
for i := 0; i < typ.NumField(); i++ {
fieldValue := val.Field(i).Interface()
fmt.Println(fieldValue)
}
}
func test1(obj interface{}){
val := reflect.ValueOf(obj)
test(val)
}
func main() {
var ss SomeStruct
test1(ss)
}
答案 0 :(得分:2)
我想你只是想这样做:
package main
import "fmt"
import "reflect"
type SomeStruct struct {
SomeField uint32
}
func test(obj interface{}){
typ := reflect.TypeOf(obj)
val := reflect.ValueOf(obj)
for i := 0; i < typ.NumField(); i++ {
fieldValue := val.Field(i).Interface()
fmt.Println(fieldValue)
}
}
func main() {
var ss SomeStruct
test(ss)
ss.SomeField = 1
test(ss)
}
您的原始代码会尝试获取val := reflect.ValueOf(ss)
而不是ss
的每个字段的值。
答案 1 :(得分:2)
在Go struct中,以小写字母开头的字段表示其范围是私有的,而大写字母表示公共字段。因此,您应该使字段以UpperCase alpha开头。