GO语言操作MySQL
Posted 张志翔ۤ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO语言操作MySQL相关的知识,希望对你有一定的参考价值。
最近工作中有使用到通过Go语言操作mysql的相关内容,特此记录便于日后查阅。
1、定义数据库结构体
type DBConfig struct {
Dsn string `json:"dsn"`
MaxIdle int `json:"maxIdle"`
}
2、数据库工具
package db
import (
"context"
"database/sql"
"sync"
"time"
_ "github.com/go-sql-driver/mysql"
log "github.com/sirupsen/logrus"
)
var (
dbLock sync.RWMutex
dbConnMap map[string]*sql.DB
)
var DB *sql.DB
func InitDB(dbConfig *g.DBConfig) {
var err error
DB, err = makeDbConn(dbConfig)
if DB == nil || err != nil {
log.Fatalln("g.InitDB, get db conn fail", err)
}
dbConnMap = make(map[string]*sql.DB)
log.Println("g.InitDB ok")
}
func GetDbConn(connName string, dbConfig *g.DBConfig) (c *sql.DB, e error) {
dbLock.Lock()
defer dbLock.Unlock()
var err error
var dbConn *sql.DB
dbConn = dbConnMap[connName]
if dbConn == nil {
dbConn, err = makeDbConn(dbConfig)
if dbConn == nil || err != nil {
closeDbConn(dbConn)
return nil, err
}
dbConnMap[connName] = dbConn
}
err = dbConn.Ping()
if err != nil {
closeDbConn(dbConn)
delete(dbConnMap, connName)
return nil, err
}
return dbConn, err
}
// 创建一个新的mysql连接
func makeDbConn(dbConfig *g.DBConfig) (conn *sql.DB, err error) {
conn, err = sql.Open("mysql", dbConfig.Dsn)
if err != nil {
return nil, err
}
conn.SetMaxIdleConns(dbConfig.MaxIdle)
sqlCtx, _ := context.WithTimeout(context.Background(), time.Duration(time.Second*10))
err = conn.PingContext(sqlCtx)
return conn, err
}
func closeDbConn(conn *sql.DB) {
if conn != nil {
conn.Close()
}
}
注意:这里我们通过 dbConnMap map[string]*sql.DB 来管理创建的数据库连接,我们的 key 是执行的SQL语句名称,value就是这条SQL对应的数据库连接,这样我们就不用频繁创建和销毁数据库连接池了,极大地提升了CPU性能。
到此 GO语言连接MySQL数据库介绍完成。
以上是关于GO语言操作MySQL的主要内容,如果未能解决你的问题,请参考以下文章