go官方仅提供了database package,database package下有两个包sql,sql/driver。这两个包用来定义操作数据库的接口,这就保证了无论使用哪种数据库,他们的操作方式都是相同的。
其中,mysql有两个包,一个是mymysql,一个是go-sql-driver/mysql,两个package都是纯go实现。我选择了后者,因为后者的效率更高一点,benchmark在这里:https://github.com/go-sql-driver/sql-benchmark
sql包的用法简洁明了:
1、建立连接
首先是Open,
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
id int
username, password string
}
var sqldata map[interface{}]interface{}
func main() {
var u User
db, err := sql.Open("mysql", "root:@/test?charset=utf8")
check(err)
插入数据
stmt, err := db.Prepare("INSERT user SET username=?,password=?")
check(err)
res, err := stmt.Exec("xiaowei", "xiaowei")
check(err)
id, err := res.LastInsertId()
check(err)
fmt.Println(id)
//查询数据
rows, err := db.Query("SELECT * FROM user")
check(err)
fmt.Println(rows.Columns())
userinfo := make(map[interface{}]interface{})
for rows.Next() {
err := rows.Scan(u.id, u.username, u.password)
check(err)
userinfo[u.id] = u
}
fmt.Println(userinfo)
}
func check(err error) {
if err != nil {
fmt.Println(err)
}
}