go测试的时候,报错;
go test 报错panic: reflect: reflect.Value.Set using unaddressable value [recovered]。
解决办法:一般出现 using unaddressable value 错误,表示传递的指针值不对,比如需要传递指针地址的,但是传了值。当时就就预感应该是db在find的时候传了非指针,验证之后果然是。
所以,总结就是:gorm里面更新的时候,可以不传指针(如果要用到返回的主键,还是要传指针的),但是查询的时候一定要传,哪怕是slice或者map类型。
PS: 用updates更新时,不能传map的引用!
比如:
func UpdateExperiment(Id int64, update map[string]interface{}) error {
conn, err := getDBConn(ctx, true)
if err != nil {
return err
}
db := conn.Table(ExperimentTable).
Where("id = ?",Id).
Updates(&update) // 这里传map的引用, 不 work!!
if db.Error != nil {
logs.CtxError(ctx, "UpdateExperiment db error:%s", db.Error)
return db.Error
}
return nil
}
应该直接传递update,而不是&update!!