reflect反射拿不到值的疑问
为什么用reflect?:哦,这里解释下。因为是练手项目,不是实际业务,刚好学到reflect包就想用上
1. 运行环境
$ go version
go version go1.22.2 windows/amd64
2. 问题描述?
model DB
type DB struct {
D *gorm.DB
value string
m any
}
model User
type UserInput struct {
Nickname string `json:"nickname" form:"nickname" gorm:"type:string;not null;unique;comment:别名"`
Passport string `json:"passport" form:"passport" binding:"required" gorm:"type:string;not null;unique;comment:账号"`
Password string `json:"password" form:"password" binding:"required" gorm:"type:string;not null;comment:密码"`
Email string `json:"email" form:"email" gorm:"type:string;not null;unique;comment:邮箱"`
Avatar string `json:"avatar" form:"avatar" gorm:"type:string;not null;comment:头像"`
}
type UserInputCreate struct {
Model
UserInput
}
简单的链式操作
NewDB():初始化gorm的DB
FindUSerModel():封装gorm的查询函数,的到的结赋值给d.m,d.m为一个any类型
GetColumn():根据FindUserModel()函数查询到的数据,然后传入用户名如:”tom”,最后根据传入的值和数据库查询到的数据进行对比。如果存在则赋值给d.value
,如果为空则d.value = ""
d := db.NewDB().FindUserModel(input)
// 查找是否存在用户
if ok := d.GetColumn(input.Passport).Exist(); !ok {
return errors.New(userNotExist)
}
func (d *DB) GetColumn(column string) *DB { // TODO 函数未实现
u := d.m
m := u.(*model.UserInputCreate)
d.value = ""
value := reflect.ValueOf(m)
if value.Kind() != reflect.Struct || value.Kind() == reflect.Invalid {
return d
}
for i := 0; i < value.NumField(); i++ {
field := value.Field(i)
if reflect.DeepEqual(field, column) {
d.value = field.String()
return d
}
}
return d
}
这里使用reflect.ValueOf
获取查询到的值,奇怪的是,一直无法拿到
3. 您期望得到的结果?
根据逻辑,传入一个值,然后判断结构体是否存在这个值,但是一直拿到不。
4. 您实际得到的结果?
不可读: unknown or unsupported kind: "invalid"