菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2274
0

Mysql驱动 Go中支持MySQL的驱动目前比较多,

原创
05/13 14:22
阅读数 2297

Mysql驱动

Go 中支持 MySQL 的驱动目前比较多,有如下几种,有些是支持 database/sql 标准,而有些是采用了自己的实现接口,常用的有如下几种:

接下来的例子我主要以第一个驱动为例,也推荐大家采用它,主要理由:

  • 这个驱动比较新,维护的比较好
  • 完全支持 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数据库的连接。

发表评论

0/200
2274 点赞
0 评论
收藏
为你推荐 换一批