Ser*_*lla 159 mysql database go
我正在寻找一个可靠的解决方案来连接到Go的MySQL数据库.我见过一些库,但很难确定完整性和当前维护的不同状态.我没有复杂的需求,但我想知道人们依赖什么,或者什么是连接MySQL的最标准的解决方案.
Den*_*ret 258
有一些驱动程序可用,但您应该只考虑那些实现数据库/ sql API的驱动程序
两个快速可靠的驱动程序可用于MySQL:
我已经在生产中使用了它们,程序运行了几个月,数百万的连接数没有失败.
go-wiki上列出了其他SQL数据库驱动程序.
使用MyMySQL时导入:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
Run Code Online (Sandbox Code Playgroud)
使用Go-MySQL-Driver时导入:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
使用Go-MySQL-Driver连接和关闭:
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
Run Code Online (Sandbox Code Playgroud)
选择一行:
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)
Run Code Online (Sandbox Code Playgroud)
选择多行并构建一个包含结果的数组:
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})
}
Run Code Online (Sandbox Code Playgroud)
插入 :
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
Run Code Online (Sandbox Code Playgroud)
你会发现在Go with MySQL中工作是一种愉快的体验:我从来没有遇到过问题,我的服务器运行了几个月而没有错误或泄漏.大多数函数只是采用可变数量的参数这一事实减轻了许多语言中繁琐的任务.
请注意,如果将来需要使用另一个MySQL驱动程序,则只需在一个go文件中更改两行:执行导入的行和打开连接的行.