精简版:
import (
"fmt"
"reflect"
)
type StatusVal int
type Foo struct {
Name string
Age int
art string
}
func ListFields(a interface{}) {
v := reflect.ValueOf(a).Elem()
fmt.Printf(" Kind: %+v \n", v.Type())
for _, f := range reflect.VisibleFields(v.Type()) {
if f.IsExported() {
fmt.Printf(" Kind: %+v \n", f)
} else {
fmt.Printf(" Kind: %s \n", f.Name)
}
}
}
func main() {
var x Foo
ListFields(&x)
}
这段代码有效,但我真正需要的是var x []Foo,我找不到一种方法让它工作并在结构切片的字段中检查 IsExported。
长版:
我正在寻找生成一个通用的 sqlToStruct 函数,我遇到了这个很棒的答案: Generalizing *sql.Rows Scan in Go
我没有在那里回复的声誉。
唯一的问题是,如果我的结构有任何未导出的字段,它就会恐慌,我想检查一下并返回一个要处理的错误,而不是让它恐慌。
另外:我在 go 中编码的时间很短,如果我遗漏了一些绝对明显的东西,请理解我来自哪里,并抱歉。
哆啦的时光机
相关分类