Golang判断结构体是否存在字段
背景
为了兼容新老版本的proto GRPC接口的判断,需要用到判断自动转换的代码里面时候存在新老字段的问题
方法
使用reflect根据对象实例
obj := CmST {
NAME: "cm",
Sxf:Sxf {
ID: "24",
},
}
//注意reflect.ValueOf(...)只能传入对象的指针
rve := reflect.ValueOf(&obj).Elem()
fmt.Println(rve.FieldByName("ID"))
fmt.Println(rve.FieldByName("NAME"))
fmt.Println(rve.FieldByName("NO") != reflect.Value{})
使用reflect根据结构类型
rto := reflect.TypeOf(CmST{})
if _, ok := rto.FieldByName("NAME"); ok {
//存在
} else {
//不存在
}