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 条评论) “” |