用gorm进行查询,数据库里值为null的字段在struct里怎么保持还是null?struct会默认变成空字符串或者0这种

err := db.Where("id = ?", id).First(&activity).Error

{"id": 30, "name": null}

数据库的name字段是null,但是&activity里的name会变成"",怎么保持还是null

type Activity struct {
    Id      int
    name    string
}
阅读 20.4k
2 个回答

我用的xorm,也有相同的问题。
这个问题用orm自带的find方法没法赋值成null,golang不支持string型赋nil值,初始化的时候就一定有默认值。
变通一下的做法就是写sql句,IFNULL(name,"无"),然后用orm执行查询sql句。

sql:= "select id,IFNULL(name,"无") from table"
result,err:=db.Query(sql)

更新和新增的时候也是一样,结构体不赋值用orm的insert语句插入数据库以后也是相应的默认值0和""

sql:="update table set ....."
err:=db.Exec(sql)
新手上路,请多包涵

将struts里面字段类型设定为指针类型就可以了。

type Activity struct {
    Id      int
    name    *string
}

这样就检索时,数据库为null的情况下,name为nil。
登录或者更新时候,如果设定name为nil的情况下,数据库name字段会变为null。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题