gorm踩的坑

gorm的那些坑

1. db.SingularTable(true)

在Gorm中,表名是结构体名的复数形式,列名是字段名的蛇形小写。即,如果有一个user表,那么如果你定义的结构体名为:User,gorm会默认表名为users而不是user。

db.SingularTable(true) 让grom转义struct名字的时候不用加上s

2. Rows.Next() 需要关闭

每次返回的rows 都是新的实例,占用一个数据库连接. rows.next()直到false 就会关闭,否则就会出现资源没有被回收,但数据库设置的超时回收也会去回收 但是会降低服务Tps。

user := new(User)
rows, err := engine.Where("id >?", 1).Rows(user)
if err != nil {
}
defer rows.Close()
for rows.Next() {
    err = rows.Scan(user)
} 

3. Scan error on column index 1, name “created_at”: unsupported Scan, storing driver.Value type []uint8

parseTime是查询结果是否自动解析为时间。+loc是MySQL的时区设置

parseTime=True&loc=Local

4. NewRecord和Create

db.NewRecord(user) // => 主键为空返回true
db.Create(&user)

NewRecord 检查主键是否存在
Create 即执行 insert 操作

你可能感兴趣的:(go语言)