go封装数据库连接池

发布时间 2023-10-18 08:39:54作者: 青烟绕指柔
package main

import (
"errors"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)

// DBConfig 定义一个DBConfig结构体,用于存储数据库连接的配置信息,包括主机地址、端口、用户名、密码和数据库名
type DBConfig struct {
Host string //主机地址
Port int //端口
Username string //用户名
Password string //密码
Database string //数据库
}

// DBConnectPool 定义了一个DBConnectPool结构体,用于保存数据库连接池
type DBConnectPool struct {
db *gorm.DB
}

// 定义全局变量dbPool,用于保存唯一的数据库连接池实例
var dbPoolInstance *DBConnectPool

// GetDbConnectPool 获取数据库连接池实例
func GetDbConnectPool(c DBConfig) (*DBConnectPool, error) {
//首先检查dbPoolInstance是否为空,如果为空,则根据DBConfig中的配置信息创建数据库连接池,并将其赋值给dbPoolInstance。
//如果创建过程中发生错误,则返回错误信息
if dbPoolInstance == nil {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", c.Username, c.Password, c.Host, c.Port, c.Database)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
return nil, errors.New("数据库连接")
}
dbPoolInstance = &DBConnectPool{
db: db,
}
}
return dbPoolInstance, nil
}

// 学生结构体
type Student struct {
Id int
Name string
Age int
Sex string
}

func (Student) TableName() string {
return "student"
}

func main() {
//创建了一个DBConfig实例,并传递给GetDbConnectPool函数来获取数据库连接池
config := DBConfig{
Host: "127.0.0.1",
Username: "root",
Password: "root",
Port: 8889,
Database: "2110a",
}
pool, err := GetDbConnectPool(config)
if err != nil {
fmt.Println(err)
}
//列表
var students []Student
err = pool.db.Find(&students).Error
//使用连接池实例进行数据库查询操作

if err != nil {
panic("读取失败")
}
fmt.Println(students)

}