有一些驱动程序可用,但您应该只考虑那些实现数据库/sql http://golang.org/pkg/database/sql/ API as
- 它提供了干净高效的语法,
- 它确保您以后可以更改驱动程序,而无需更改代码(除了导入和连接之外)。
有两个快速可靠的驱动程序可用于 MySQL:
- MyMySQL http://github.com/ziutek/mymysql
- Go-MySQL-驱动程序 https://github.com/Go-SQL-Driver/MySQL/
我已经在生产中使用了它们,程序运行了数月,连接数达到数百万,没有出现故障。
其他 SQL 数据库驱动程序已在 go-wiki 上列出 http://code.google.com/p/go-wiki/wiki/SQLDrivers.
使用MySQL时导入:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
使用 Go-MySQL-Driver 时导入:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
使用 MySQL 连接和关闭:
con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns
使用 Go-MySQL-Driver 连接和关闭:
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
选择一行:
row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)
选择多行并用结果构建一个数组:
rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
err = rows.Scan(&ida, &idb)
if err != nil { /* error handling */}
items = append(items, &SomeStruct{ida, idb})
}
Insert :
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
你会发现使用 Go 和 MySQL 一起工作是一次愉快的经历:我never遇到问题时,我的服务器运行了几个月,没有出现错误或泄漏。事实上,大多数函数只接受可变数量的参数,这减轻了许多语言中乏味的任务。
请注意,如果将来您需要使用另一个 MySQL 驱动程序,则只需更改一个 go 文件中的两行:执行导入的行和打开连接的行。