1、连接数据库首先需要有连接驱动,因为官方没有实现,所以需要用到三方已经实现的驱动依赖包 : github.com/go-sql-driver/mysql,下载依赖包可以通过cmd命令的方式直接下载 : go get github.com/go-sql-driver/mysql ;
下载成功后悔保存到当前系统的GOPATH目录下的src子目录中,关于修改GOPATH请参考Windows7系统修改GO语言环境变量(GOPATH)
2、连接数据库需要导入包:
import (
"database/sql"
"fmt"
/*
必须导入这个支持数据库的三方依赖,
否则runtime error: invalid memory address or nil pointer dereference
*/
_ "github.com/go-sql-driver/mysql"
)
golang语言的import中使用“_”表示导入的这个包下面的所有init()函数都会被执行,此外包中的其他函数是无法调用的;
3、以下为全部代码,亲测可用,
package main
import (
"database/sql"
"fmt"
/*
必须导入这个支持数据库的三方依赖,
否则runtime error: invalid memory address or nil pointer dereference
*/
_ "github.com/go-sql-driver/mysql"
/*
import导入中“_”前置符号表示这个被导入的包中所有的init()函数都会被执行,但是其他的函数无法调用
init()函数不能被调用,会优先main()函数被执行,不需要参数,也不需要返回值,一个包中可以包含多个init()函数
*/)
func main() {
fmt.Println("Hello World!")
mysqlConnet()
}
func mysqlConnet() {
//创建sql.DB连接池,sql.Open()返回*sql.DB,err
/*
Open()方法参数 :
第一个参数是驱动程序名称。这是驱动程序用于注册的字符串
第二个参数是驱动程序特定的语法,告诉驱动程序如何访问底层数据存储,shiro_test为databaseName
参数信息可以抽出为结构体struct
*/
DB, _ := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/shiro_test?charset=utf8")
//设置最大连接周期
DB.SetConnMaxLifetime(100)
//设置数据库最大闲置连接数
DB.SetMaxIdleConns(10)
//DB.Ping()验证连接
if err := DB.Ping(); err != nil {
fmt.Println("open dataBase fail")
return
}
fmt.Println("open dataBase success")
defer DB.Close() //关闭
/*
defer关键字后的代码块必定会被执行,而且被执行的必定是函数调用语句
*/
}