假设有这样一个结构体
type S struct {
a int64
B []string
c float64
}
a := S{1, []string{"abc", "cba"}, 3.14}
用反射可以轻松拿到每个字段的值
reflect.ValueOf(a).FieldByName("a")
reflect.ValueOf(a).FieldByName("B")
reflect.ValueOf(a).FieldByName("c")
但这样返回的类型是reflect.Value
如果想还原自身类型,还需进一步操作
reflect.ValueOf(a).FieldByName("B").Interface().([]string)
但是也有些限制,Interface()方法仅可用于导出字段
所以S.a和S.c没有办法用这个方法还原
本文介绍了如何使用Golang的反射库来获取结构体字段的值,并讨论了如何将反射得到的接口值还原为原始类型。同时指出,这种方法仅适用于导出(大写开头)字段,对于未导出字段如S.a和S.c则无法直接还原。
748

被折叠的 条评论
为什么被折叠?



