博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang实现一个简单的mysql连接池
阅读量:3991 次
发布时间:2019-05-24

本文共 1086 字,大约阅读时间需要 3 分钟。

import (	"database/sql"	"errors"	"log"	"time"	_ "github.com/go-sql-driver/mysql")var ConnPoll chan *Connvar maxIdleConns = 10 // 最大空闲var maxIdleTime = 10  // 最大空闲时间,10svar maxOpenConns = 20 // 最大连接数const (	host = "xxxxxx"	user = "xxxxxx"	pass = "xxxxxx"	db   = "xxxxxx")type Conn struct {
conn *sql.DB lastUse time.Time}func addConn(conn *Conn) {
if ConnPoll == nil {
ConnPoll = make(chan *Conn, maxOpenConns) } if len(ConnPoll) >= maxOpenConns {
conn.conn.Close() return } ConnPoll <- conn}func initDB() {
if len(ConnPoll) == 0 {
ConnPoll = make(chan *Conn, maxOpenConns) for i := 0; i < maxOpenConns/2; i++ {
db, err := sql.Open("mysql", user+":"+pass+"@tcp("+host+":3306)/"+db+"?charset=utf8") if err != nil {
log.Println(err) } addConn(&Conn{
conn: db}) } }}func GetConn() (conn *Conn, err error) {
if ConnPoll == nil || len(ConnPoll) == 0 {
initDB() } // 获取连接,超时控制 select {
case <-time.After(time.Second * time.Duration(3)): err = errors.New("timeout") case conn = <-ConnPoll: } return conn, nil}

主要使用channel来实现。

转载地址:http://znaui.baihongyu.com/

你可能感兴趣的文章
数据结构和算法(2)-栈与队列
查看>>
linux学习(二)
查看>>
一千行 MySQL 学习笔记
查看>>
linux下导出导入.sql文件
查看>>
linux下安装jdk及tomcat
查看>>
TCP 协议-滑动窗口
查看>>
浅谈Nginx负载均衡与F5的区别
查看>>
登五云山
查看>>
linux下安装zookeeper
查看>>
Go学习(1):简介和配置
查看>>
Go学习(2):基本语法
查看>>
Go学习(3):分支循环
查看>>
Go学习(4):数组和切片
查看>>
数据结构和算法(3)-向量,列表与序列
查看>>
Go学习(5):集合
查看>>
《码农翻身》各章节阅读链接
查看>>
数据结构和算法(4)-树
查看>>
数据结构和算法(5)-树
查看>>
MVC,MVP 和 MVVM 的图示
查看>>
js中判断字符串相等使用==
查看>>