Golang反射报FieldByNameFunc of non-struct type

Golang可以使用反射获取结构体Tag,从而实现动态数据绑定。今天在使用反射时却报了FieldByNameFunc of non-struct type,看代码明明类型是一个struct,奇怪了。

示例如下:

type Info struct {   Name   string        `key:"name"`   Gender int           `key:"gender"`}info := &Info{    Name:   "DingDong",    Gender: 1,}typeOfInfo := reflect.TypeOf(info)field, found := typeOfInfo.FieldByNameFunc(func(fieldName string) bool {    field, _ := typeOfInfo.FieldByName(fieldName)    return field.Tag.Get("key") == key})

以上代码运行到第10行就会报FieldByNameFunc of non-struct type这样的错误,其实原因是变量info是一个指针,而反射需要的是一个值类型,解决办法是修改第9行为

typeOfInfo := reflect.TypeOf(info).Elem()

除此之外,只要我们传递给TypeOf的是一个值类型也是可以的,因此第9行修改为如下这样的语句也是可以的

typeOfInfo := reflect.TypeOf(Info{})
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章