database/sql包
初始化
database/sqldatabase/sqldatabase/sqlsql.Open()db.Ping()sql.DBOpen()Close()sql.DB
连接池配置
db.SetMaxOpenConns(n int)too many connectionsdb.SetMaxIdleConns(n int)MaxIdleConnsMaxOpenConnsdb.SetConnMaxLifetime(t time.Duration)db.SetConnMaxIdleTime(t time.Duration)MySQLwait_timeoutwait_timeoutsql.DB

操作
db.Prepare?$N:paramdb.Exec()db.Query()INSERT, UPDATE, DELETEQuerysql.Rowssql.Rowsrows.Next()io.EOFrows.Closefor rows.Next(){}rows.Next()net.Connrows.Close()rows.Close()rows.ScanVARCHAR"1"strconv.ParseInt()strconv.ParseInt()rows.ScanColumns()Scan()rows.Columnssql.RawBytes
cols, err := rows.Columns()
if err != nil{
panic(err)
}
vals := make([][]byte, len(cols))
scans := make([]interface{}, len(cols))
for i := range vals{
scans[i] = &vals[i]
}
var results []map[string]string
for rows.Next(){
err = rows.Scan(scans...)
if err != nil{
panic(err)
}
row := make(map[string]string)
for k, v := range vals{
key := cols[k]
row[key] = string(v)
}
results = append(results, row)
}
事务
txtxdbstmt
错误处理
database/sqlmaxBadConnRetriesrows.Scanrows.Err()Nextdb.QueryRow()sql.ErrNoRowsQueryRow()
原理
- 接口定义

- 调用关系

GORM
TableName() stringgorm:"column:"IDgorm:"primary_key"*DB