本日志不定期更新。
一、记录增加,但是数据为空
文档原话为:
默认情况下,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()
}()