Golang学习日志 ━━ gorm的坑~~

本日志不定期更新。

一、记录增加,但是数据为空

文档原话为:

默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间

其中容易被忽略的是:

如果结构体的属性对应着表里的字段,那么该属性名的首字母必须大写,否则与数据库互动时,该属性(列)将被忽略。
此时可能发生记录虽然新增了,但由于没有对应的列,于是数据都为空。

例如

type User struct {
	gorm.Model
	Username string `gorm:"unique; not null"`
	password string `gorm:"not null;"`
}

利用这个结构体,无论是创建表还是进行其它数据库操作,password都不会作为列参与进来。
因此必须改成如下方式,password才会奏效:

type User struct {
	gorm.Model
	Username string `gorm:"unique; not null"`
	Password string `gorm:"not null;"`
}

注意:表字段实际名称可以全为小写,并不必须首字母大写

参考链接:go语言gorm踩坑笔记

二、无法关闭数据库连接

网上教程用的都是gorm1.0版本,使用defer db.Close()就行了,但现在gorm已经是2.0版,系统会提示方法不存在。
后来网上又找到一些文章说因为有连接池,可以不需要Close()

于是我半信半疑的启动了程序~~~半天后,数据库提示连接过多,崩了。。。打开监视器,发现连接全在,唉。

最终还是找到了办法 常规数据库接口 sql.DB

老版可能是这样写的:

db, err := gorm.Open("...", "... ...")
defer db.Close()

现在需要这样写:

db, err := gorm.Open(..., ...)
defer func() {
	sqlDB, err := db.DB()
	if err != nil {
		...
	}
	sqlDB.Close()
}()

参考链接:
go 通过gorm新建的数据库连接, 何时close呢

评论 8 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

暂时先用这个名字

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值