Mysql驱动
Go 中支持 MySQL 的驱动目前比较多,有如下几种,有些是支持 database/sql 标准,而有些是采用了自己的实现接口,常用的有如下几种:
- https://github.com/go-sql-driver/mysql 支持 database/sql,全部采用 go 写。
- https://github.com/ziutek/mymysql 支持 database/sql,也支持自定义的接口,全部采用 go 写。
- https://github.com/Philio/GoMySQL 不支持 database/sql,自定义接口,全部采用 go 写。
接下来的例子我主要以第一个驱动为例,也推荐大家采用它,主要理由:
- 这个驱动比较新,维护的比较好
- 完全支持 database/sql 接口
- 支持 keepalive,保持长连接,虽然 星星 fork 的 mymysql 也支持 keepalive,但不是线程安全的,这个从底层就支持了 keepalive。
连接数据库
下面我们使用 github.com/go-sql-driver/mysql
包来连接Mysql数据库。
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/example?charset=utf8")
//检查数据库类型是否符合
if err != nil {
fmt.Println("错误", err)
return
}
//检查是否连接成功
c := db.Ping()
if c != nil {
fmt.Println("错误", err)
return
} else {
fmt.Println("连接成功")
}
编译运行文件:
$ go run mysql.go
连接成功
通过上面的代码我们可以看出,Go 操作 Mysql 数据库是很方便的。
sql.Open () 函数用来打开一个注册过的数据库驱动,go-sql-driver 中注册了 mysql 这个数据库驱动,第二个参数是 DSN (Data Source Name),它是 go-sql-driver 定义的一些数据库链接和配置信息。它支持如下格式:
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname
优化
我们应该将mysql的配置数据放在项目的config目录下,所以我们创建config目录并在其下创建db.go来存放Mysql的连接信息:
package conf
type DbConf struct {
Host string
Port string
User string
Pwd string
DbName string
}
var MasterDbConfig DbConf = DbConf{
Host: "127.0.0.1",
Port: 3306,
User: "root",
Pwd: "root",
DbName: "example",
}
修改一下我们前面的文件,让它来加载config下的配置文件。
package main
import (
"database/sql"
"fmt"
"mysqlExample/conf"
_ "github.com/go-sql-driver/mysql"
)
func main() {
//加载config下的mysql配置
con := conf.Example
db, err := sql.Open("mysql", con.User+":"+con.Pwd+
"@tcp("+con.Host+":"+con.Port+")/"+con.DbName+"?charset=utf8")
//校验数据库类型
if err != nil {
fmt.Println("错误1", err)
return
}
//校验账号密码及数据库
c := db.Ping()
if c != nil {
fmt.Println("错误2", err)
return
} else {
fmt.Println("连接成功")
}
}
编译并运行:
$ go run mysql.go
连接成功
至此,我们使用Go语言完成了Mysql数据库的连接。
© 著作权归作者所有
发表评论