gin是开源的优秀golang web框架之一,github repo:https://github.com/gin-gonic/gin
gin的pool是sync.Pool类型
Engine struct {
...
pool sync.Pool
...
}
gin是开源的优秀golang web框架之一,github repo:https://github.com/gin-gonic/gin
gin的pool是sync.Pool类型
Engine struct {
...
pool sync.Pool
...
}
type User struct{
TableName string `sql:"user_?SHARD"`
...
}
postgres中user表按uid进行sharding存储。这样会有16张表user_0到user_f。pg.v4 中关于事务可以使用 方法一和方法二
方法一
err := getDB().RunInTransaction(func(tx *pg.Tx) error {
q := fmt.Sprintf("INSERT INTO user_%s (id,x,x,x) VALUES(default,y,y,y) RETURNING *",shard_str)
_, err := this.shard().QueryOne(this,q,this)
return err
})
golang pg.v4的Select,返回结果有可能是0行 1行或者多行,如果根据返回的行数进行下一步的insert 或update,应该怎么做? 如果使用
b:= &[]Book{}
err:= db.Model(b).Where("blabla").Select()
除非是数据库连接异常才会抛出error,而
b:= &Book{}
err:= db.Model(b).Where("blabla").Select()
会在select没有结果时抛出pg.ErrNoRows
,有多行时抛出pg.ErrMultiRows
,1行时返回nil
,数据库异常时error
。
看下源码实现:
db.go
func (db *DB) Model(model interface{}) *orm.Query {
return orm.NewQuery(db, model)
}