我正在寻找一种可靠的解决方案,以从Go连接到MySQL数据库。我已经看到了一些库,但是很难确定完整性和当前维护的不同状态。我没有复杂的需求,但是我想知道人们所依赖的是什么,或者连接到MySQL的最标准的解决方案是什么。
有一些驱动程序可用,但您应仅考虑将实现数据库/ sql API的驱动程序视为
两个快速可靠的驱动程序可用于MySQL:
我在生产中都使用了它们,程序运行了几个月,连接数以百万计没有失败。
其他SQL数据库驱动程序在go-wiki上列出。
使用MyMySQL时导入:
import ( "database/sql" _ "github.com/ziutek/mymysql/godrv" )
使用Go-MySQL-Driver导入:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
使用MyMySQL连接和关闭:
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}) }
插 :
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
您会看到在Go中使用MySQL是一种令人愉快的体验:我 从来没有 遇到问题,我的服务器运行了数月之久没有出现错误或泄漏。大多数函数仅采用可变数量的参数这一事实减轻了一项任务,这在许多语言中都是乏味的。
请注意,如果将来需要使用另一个MySQL驱动程序,则只需要在一个go文件中更改两行:执行导入的行和打开连接的行。