在项目中,避不可少要使用到数据库,这里以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,保持长连接。
写好一个databases包
package databases import ( "database/sql" _ "github.com/go-sql-driver/mysql" "golang-api/config"//自己内置的config包 "strconv" // "fmt" ) //因为我们需要在其他地方使用SqlDB这个变量,所以需要大写代表public var SqlDB *sql.DB //初始化方法 func init() { var err error //获取配置信息(这是我自己使用的获取mysql连接配置的方法) mysqlCfg := config.GetCfg("mysql") //连接 SqlDB, err = sql.Open("mysql", mysqlCfg["USER"]+ ":"+mysqlCfg["PASSWORD"]+ "@tcp("+mysqlCfg["HOST"]+ ":"+mysqlCfg["PORT"]+ ")/"+mysqlCfg["DATABASE"]+ "?charset="+mysqlCfg["CHARSET"]) //连接检测 err = SqlDB.Ping() if err != nil { panic(err.Error()) }else{ // 设置数据库最大连接 减少timewait 正式环境调大 maxIdleConns,_ := strconv.Atoi(mysqlCfg["MaxIdleConns"]) maxOpenConns,_ := strconv.Atoi(mysqlCfg["MaxOpenConns"]) SqlDB.SetMaxIdleConns(maxIdleConns) // 连接池连接数 = mysql最大连接数/2 SqlDB.SetMaxOpenConns(maxOpenConns) // 最大打开连接 = mysql最大连接数 // 设置链接重置时间 // SqlDB.SetConnMaxLifetime(80 * time.Second) } // fmt.Printf(`%T`, SqlDB) }在main.go文件中导入databases包即可(因为放在init方法里面,所以自动连接实例。)
记得在入口文件中加上以下语句,关闭连接
//当整个程序完成之后关闭数据库连接 defer DB.SqlDB.Close()
import ( DB "golang-api/library/mysql"//实际根据自己路径导入即可 ) //调用案例 rows,_ := DB.SqlDB.Query("select id,nick_name,sex from tables order by id desc limit 1;")