Gin 协程mysql客户端

一、Gin框架 mysql配置

这里选择yaml文件配置

二、配置读取 viper

读取yaml文件中对应配置

三、mysql 的协程客户端

文件位置

Go 复制代码
package database

import (
	"database/sql"
	"fmt"
	"github.com/spf13/viper"
	"log"
	"net/http"
	"sync"

	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
)

var Db *sql.DB
var once sync.Once

func initDB() {
	var err error

	DBUser := viper.GetString("database.username")
	DBPwd := viper.GetString("database.password")
	DBHost := viper.GetString("database.host")
	DBPort := viper.GetString("database.port")
	DBName := viper.GetString("database.name")

	//"username:password@tcp(127.0.0.1:3306)/dbname"
	dsn := DBUser + ":" + DBPwd + "@tcp(" + DBHost + ":" + DBPort + ")/" + DBName
	Db, err = sql.Open("mysql", dsn)
	if err != nil {
		log.Fatal(err)
	}
	// 设置连接池参数(可选)
	Db.SetMaxOpenConns(10)
	Db.SetMaxIdleConns(5)
	// 验证连接是否有效
	if err = Db.Ping(); err != nil {
		log.Fatal(err)
	}
}

func queryDB(wg *sync.WaitGroup, id int) {
	defer wg.Done()
	var name string
	err := Db.QueryRow("SELECT name FROM crm_user WHERE id=?", id).Scan(&name)
	if err != nil {
		log.Printf("Error querying database for id %d: %v", id, err)
		return
	}
	fmt.Printf("Queried name for id %d: %s\n", id, name)
}

这样就完成了,访问情况如下

相关推荐
ZHENGZJM1 天前
Server-Sent Events (SSE) 接口实现
架构·go·gin
ZHENGZJM1 天前
统一响应封装与 API 错误处理
react.js·go·gin
ZHENGZJM1 天前
仓库抓取与内容提取
go·gin
GDAL3 天前
gin.H 深入全面讲解
gin·h
呆萌很3 天前
【Gin】参数处理练习题
gin
GDAL3 天前
gin.Default() 深入全面讲解
golang·go·gin
GDAL4 天前
为什么选择gin?
golang·gin
ZHENGZJM8 天前
Gin 鉴权中间件设计与实现
中间件·gin
ZHENGZJM8 天前
认证增强:图形验证码、邮箱验证与账户安全
安全·react.js·go·gin
女王大人万岁9 天前
Golang实战gin-swagger:自动生成API文档
服务器·开发语言·后端·golang·gin