解决goxorm无法更新值为默认值的问题

今天遇到个问题,goxorm无法更新某一个字段为0.

xxTable := &models.XXTable{Visible: visible}

affected, err := eng.Where("id=?", id).Update(xxTable)

这种情况下,因为go的结构初始值都是各自的0值,所以xorm无法识别要更新结构体中的哪个col,如下方法写可以正常解决。

xxTable := &models.XXTable{Visible: visible}

affected, err := eng.Where("id=?", id).Cols("visible").Update(xxTable)

补充:golang gin xorm注意事项

1. 无论是golang还是xorm中,在填写j'son字段时,注意空格,比如 `json:"abcd "` `json:"abcd"`是不一样的,不仔细对比会出错

2.当结合gin框中的

c.JSON(http.StatusOK,gin.H{})操作

并且使用xorm中的join,find操作时(https://www.kancloud.cn/xormplus/xorm/167102)要注意如下现象,

假如定义两个结构体对应两个表

然后使用联合查询,先把两个结构体结合成一个结构体,假如如下,在UserGroup中使用User和Group匿名结构体,

那么当我们使用gin的c.JSON(http.StatusOK,gin.H{"data":UserGroup})返回数据时会导致Group和User中同名字段显示不了,这应该是gin和xorm的不是很兼容造成的(没有深究),要解决这个问题,最好让UserGroup中的User和Group不要以匿名结构体的形式存在,可以改成

type UserGroup struct {
  MyUser User `xorm:"extends" json:"你要json中返回的名字"`
  MyGroup Group `xorm:"extends" json:"你要json中返回的名字"`
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • goland设置控制台折叠效果

    1.快捷键 ctrl(cmd) + shift + A或者Help->Find Action 2.输入Registry,输完记得回车 3.取消go.run.process.with.pty勾选 小知识点:上面图可以直接搜索->直接输入go.run.process就能快速找到 4.完成后的效果图 到此这篇关于goland设置控制台折叠效果的文章就介绍到这了,更多相关goland控制台折叠内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • xorm根据数据库生成go model文件的操作

    你懂的,手工翻译表定义到go结构体是很枯燥的. so,用xorm搞定. go get github.com/go-xorm/cmd/xorm 安装以下依赖,用到哪个装哪个. github.com/go-xorm/xorm 驱动 Mysql: github.com/go-sql-driver/mysql Postgres: github.com/lib/pq SQLite: github.com/mattn/go-sqlite3 MSSQL: github.com/denisenkom/go-ms

  • Golang 实现Thrift客户端连接池方式

    1 前言 阅读文章之前,请先了解一下thrift相关知识.thrift官方并没有提供客户端连接池的实现方案,而我们在实际使用时,thrift客户端必须复用,来保证较为可观的吞吐量,并避免在高QPS调用情况下,不断的创建.释放客户端所带来的机器端口耗尽问题. 本文会详细讲解如何实现一个简单可靠的thrift客户端连接池,并通过对照实验来说明thrift客户端连接池所带来的好处. 由于篇幅的原因,本文只粘出关键代码,源代码请查看Thrift Client Pool Demo 1.1 运行环境 Gol

  • golang 生成定单号的操作

    年(2位)+一年中的第几天(3位)+指定位数随机数 //生成单号 //06123xxxxx //sum 最少10位,sum 表示全部单号位数 func MakeYearDaysRand(sum int) string { //年 strs := time.Now().Format("06") //一年中的第几天 days := strconv.Itoa(GetDaysInYearByThisYear()) count := len(days) if count < 3 { //重

  • 解决go build不去vendor下查找包的问题

    go build 报错: main.go:5:2: cannot find package "gopkg.in/go-playground/validator.v9" in any of: /usr/local/go/src/gopkg.in/go-playground/validator.v9 (from $GOROOT) /root/work/testjdcloud/src/gopkg.in/go-playground/validator.v9 (from $GOPATH) 但是为

  • 解决mybatis查询结果为null时,值被默认值替换问题

    目录 查询结果为null时,值被默认值替换 问题原因 解决办法 mybatis查询结果处理 处理核心流程 返回类型处理ResultHandler 字段类型处理TypeHandler 查询结果为null时,值被默认值替换 问题:pojo种设置了一个默认值,当此字段查询结果为空时,字段值变成了默认值0,经过排查发现,mybatis在赋值时并没有调用set方法赋值,而是直接调用get方法,取了默认值 问题原因 原因是因为mybatis在给map赋值时,如果返回值不是基本数据类型,且返回值为null,就

  • Java未赋值变量的初始值解析(默认值)

    目录 Java未赋值变量的初始值(默认值) 初始值(默认值) 实例变量(非静态字段) 类变量(静态字段) 本地变量 参数 解决java未赋值变量的默认值问题 如下所示 Java未赋值变量的初始值(默认值) 初始值(默认值) 参考:官方文档 Java程序中,任何变量必须初始化后才能使用. 以下为不同数据类型的默认值. 数据类型 初始值 byte 0 short 0 int 0 long 0L char 'u0000' float 0.0f double 0 boolean false 所有引用类型

  • sql2008设置subcategory报表参数可用值和默认值步骤分享

    1.  在"报表数据"窗格的"参数"文件夹中,右键单击 Subcategory,然后单击"参数属性". 2.  单击"可用值". 3.  单击"从查询中获取值". 4.  在"数据集"下拉列表中,单击 SubcategoryValues. 5.  在"值"字段中,单击 Subcategory. 6.  在"标签"字段中,单击 Subcategory

  • 解决goxorm无法更新值为默认值的问题

    今天遇到个问题,goxorm无法更新某一个字段为0. xxTable := &models.XXTable{Visible: visible} affected, err := eng.Where("id=?", id).Update(xxTable) 这种情况下,因为go的结构初始值都是各自的0值,所以xorm无法识别要更新结构体中的哪个col,如下方法写可以正常解决. xxTable := &models.XXTable{Visible: visible} affe

  • 点击提交按钮后DropDownList的值变为默认值实现分析

    在点击提交按钮后,页面上所有的绑定到数据库的控件值都恢复到默认值 原因是要将绑定函数loadData(),写在 if(!IsPostBack) { 你的绑定函数: } 否则,页面会重新加载,所有控件的值变为初始值. IsPostBack是Page类有一个bool类型的属性,用来判断针对当前页是正在为响应客户端回发而加载还是正在被首次加载和访问. 当IsPostBack=true时表示为响应客户端回发而加载. 当IsPostBack=false时表示正在被首次加载和访问. 也就是说只有当IsPos

  • JPA默认值设置没有效果的解决

    目录 问题:默认值设置没有效果 解决办法 JPA为字段设置默认值 问题:默认值设置没有效果 springboot项目的JPA数据库表的类添加默认值,有2种方法 1.@Column(columnDefinition = "varchar(35) default '12345' ") 2.@ColumnDefault("12345") 要求:设置img字段默认值为/imgs/defunct.png 依赖 <dependency> <groupId>

  • vue el-switch初始值(默认值)不能正确显示状态问题及解决

    目录 el-switch 初始值(默认值)不能正确显示状态 使用el-switch显示状态异常 1.问题表述 el-switch 初始值(默认值)不能正确显示状态 先去检查一下接口返回格式 如果是字符串 不需要加冒号 active-value="1" inactive-value="2" 如果是数字 :active-value="1" :inactive-value="2" 使用el-switch显示状态异常 1.问题表述 v

  • C++函数参数取默认值的深入详解

    一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同.有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了.如有一函数声明float area(float r=6.5);指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如area( );  //相当于area(6.5);如果不想使形参取此默认值,则通过实参另行给出.如area(7.5); //形参得到的值为7.5,而不是6.5这

  • jQuery设置和移除文本框默认值的方法

    本文实例讲述了jQuery设置和移除文本框默认值的方法.分享给大家供大家参考.具体分析如下: 开始时,文本框设定一个默认值.当光标移动到文本框时,如果文本框当前值是默认值,那么清空:离开文本框时,文本框值如果为空,那么将文本框值设置为默认值. 代码如下: $(document).ready(function() { //each遍历文本框 $(".input").each(function() { //保存当前文本框的值 var vdefault = this.value; $(thi

  • javascript和jquery实现设置和移除文本框默认值效果代码

    这里想实现的效果是:设置和移除文本框默认值,如下图鼠标放到文本框中的时候,灰字消失. 1.可以用简单的方式,就是给input文本框加上onfocus属性,如下代码: 复制代码 代码如下: <input id="keyword" name="keyword" size="10" class="inputstyle keywords" value="请输入关键字进行搜索"    onfocus='if(t

随机推荐