go语言mysql配置文件_Go语言从入门到精通 -【web项目实战篇】- MySQL的初始化

本节核心内容

介绍链接MySQL有哪些必备条件

介绍Mysql配置文件的配置规则

介绍如何连接数据库

讲解在初始化时的注意事项和常见问题

本小节视频教程和代码:百度网盘

可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。

简介

Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能:

sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作.

sql.DB 为我们管理数据库连接池

需要注意的是,sql.DB表示操作数据库的抽象访问接口,而非一个数据库连接对象;它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,会导致过多连接使系统资源耗尽。

导入MySQL数据库驱动

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

)

通常来说, 不应该直接使用驱动所提供的方法, 而是应该使用 sql.DB, 因此在导入 mysql 驱动时, 这里使用了匿名导入的方式(在包路径前添加 _), 当导入了一个数据库驱动后, 此驱动会自行初始化并注册自己到Golang的database/sql上下文中, 因此我们就可以通过 database/sql 包提供的方法访问数据库了.

MySQL配置文件规则

在使用MySQL之前,我们需要先来进行一些配置

mysql:

#最大空闲连接数

max_idle_conns: 50

#链接

source_name: root:root@tcp(127.0.0.1:3306)/test?parseTime=true&charset=utf8&loc=Local

它的配置规则如下:

账号:密码@tcp(IP:端口号)/数据库名?parseTime=true&charset=utf8&loc=Local

在有了正确的配置文件后,我们就可以通过读取配置文件来进行MySQL的初识化工作,从而使程序能链接访问MySQL数据库。

连接数据库

package model

import (

"database/sql"

"log"

"mysql/config"

_ "github.com/go-sql-driver/mysql" //这个引用是必不可少的,因为需要调用driver.go文件里的init方法来提供一个数据库驱动程序

"github.com/spf13/viper"

)

var DB *sql.DB //全局变量,这样可以在别处调用

func Init() *sql.DB {

var err error

//加载配置文件

config.Init()

//这行代码的作用就是初始化一个sql.DB对象

DB ,err = sql.Open("mysql", viper.GetString("mysql.source_name"))

if nil != err {

panic(err)

}

//设置最大超时时间

DB.SetMaxIdleConns(viper.GetInt("mysql.max_idle_conns"))

//建立链接

err = DB.Ping()

if nil != err{

panic(err)

}else{

log.Println("Mysql Startup Normal!")

}

return DB

}

在看完上边的代码之后,是不是感觉很简单,总结上面代码我们可以发现,我们想建立一个MySQL链接只需要以下这四步:

导入_ "github.com/go-sql-driver/mysql"进行数据库驱动的注册

读取配置信息,调用sql.Open初始化一个DB对象

对DB对象进行属性设置

调用DB.Ping()方法测试链接是否通畅

注意事项

Open()函数

在上面的代码中,我们通过调用sql.Open函数返回一个sql.DB指针; sql.Open函数原型如下:

func Open(driverName, dataSourceName string) (*DB, error)

参数为:

driverName: 使用的驱动名. 这个名字其实就是数据库驱动注册到 database/sql 时所使用的名字.

dataSourceName: 数据库连接信息,这个连接包含了数据库的用户名, 密码, 数据库主机以及需要连接的数据库名等信息.

注意事项

sql.Open并不会立即建立一个数据库的网络连接, 也不会对数据库链接参数的合法性做检验, 它仅仅是初始化一个sql.DB对象. 当真正进行第一次数据库查询操作时, 此时才会真正建立网络连接;

sql.DB表示操作数据库的抽象接口的对象,但不是所谓的数据库连接对象,sql.DB对象只有当需要使用时才会创建连接,如果想立即验证连接,需要用Ping()方法;

sql.Open返回的sql.DB对象是协程并发安全的.

sql.DB的设计就是用来作为长连接使用的。不要频繁Open, Close。比较好的做法是,为每个不同的datastore建一个DB对象,保持这些对象Open。如果需要短连接,那么把DB作为参数传入function,而不要在function中Open, Close。

Mysql日期时间类型报错

sql: Scan error on column index 1: unsupported Scan, storing driver.Value type []uint8 into type *time.Time

原因是在调用sql.Open()时没有将parseTime设置为True。加入parseTime即可修复问题:

db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?parseTime=true")

小节

本小节主要演示了在Go语言中,如何去编写MySQL配置文件和对MySQL的初始化链接,以及讲解了在初见数据库链接时的一些注意事项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值