博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次goer新手的using unaddressable value错误
阅读量:3950 次
发布时间:2019-05-24

本文共 691 字,大约阅读时间需要 2 分钟。

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!!

转载地址:http://hnkzi.baihongyu.com/

你可能感兴趣的文章
linux学习之查找文件find,locate,whereis使用
查看>>
JS中$含义及用法
查看>>
web学习之ajax记录
查看>>
解决报错 “build.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”
查看>>
linux学习之tr操作符用法
查看>>
shell的dirname $0和readlink用法
查看>>
设计模式——设计模式三大分类以及六大原则
查看>>
Android开发——ListView局部刷新的实现
查看>>
Android开发——ListView的复用机制源码解析
查看>>
Android开发——架构组件LiveData源码解析
查看>>
IDEA常用快捷键整理
查看>>
【Vue】两个元素同一行显示
查看>>
XXL-Job使用
查看>>
如何在SwaggerAPI中添加统一授权认证
查看>>
多线程
查看>>
【Linux】Centos7 常用命令
查看>>
【Redis】Centos7下安装Redis
查看>>
【Redis】Centos7下搭建Redis集群
查看>>
【Redis】Centos7下搭建Redis集群——哨兵模式
查看>>
【Linux】本地ping不同VM虚拟机
查看>>