gin框架数据库连接及swg配置
GO语言Gin框架使用
依赖安装
go get github.com/gin-gonic/gin
go get gorm.io/gorm
go get gorm.io/driver/mysql
go get github.com/swaggo/swag/cmd/swag
go get github.com/swaggo/gin-swagger
go get github.com/swaggo/files
目录结构

配置使用swg及数据库
main文件
package main
import (
"go_test/config"
"go_test/models"
"go_test/routers"
)
// @title Gin 示例 API (全局声明必须留一个在 main 里供 swag 扫描)
// @version 1.0
// @host localhost:443
// @BasePath /api/v1
func main() {
// 1. 加载配置
cfg := config.LoadConfig()
// 2. 初始化路由 (包含 swagger 和业务路由)
r := routers.InitRouter(cfg)
// 3. 初始化数据库连接
err := models.InitDB()
if err != nil {
panic(err) // 连不上数据库直接退出
}
// 3. 启动服务 swg地址 http://localhost:8885/swagger/index.html
err = r.Run(":" + cfg.Port)
if err != nil {
return
}
}
router.go
package routers
import (
"go_test/config"
"go_test/controllers"
"github.com/gin-gonic/gin"
)
func InitRouter(cfg *config.AppConfig) *gin.Engine {
r := gin.Default()
// 注册 Swagger 路由
SetupSwaggerRouter(r, cfg)
// 注册业务 API 路由
api := r.Group("/api/v1")
{
api.GET("/ping", controllers.PingHandler)
// 注册读取数据库的路由
api.GET("/users", controllers.GetUsers)
}
return r
}
db.go
package models
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// DB 是一个全局的数据库连接池实例
var DB *gorm.DB
func InitDB() error {
// 格式: 用户名:密码@tcp(主机IP:端口)/数据库名?charset=utf8mb4&parseTime=True&loc=Local
dsn := "root:root@tcp(127.0.0.1:3306)/welfare?charset=utf8mb4&parseTime=True&loc=Local"
var err error
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
return fmt.Errorf("数据库连接失败: %v", err)
}
fmt.Println("数据库连接成功!")
return nil
}
controllers下sys_user.go 文件
package controllers
import (
"net/http"
"go_test/models"
"github.com/gin-gonic/gin"
)
// GetUsers @Summary 获取用户列表
// @Description 从数据库读取所有用户信息
// @Tags 用户管理
// @Produce json
// @Success 200 {array} models.SysUser
// @Router /users [get]
func GetUsers(c *gin.Context) {
var users []models.SysUser
// 使用 GORM 查询数据库,相当于 SELECT * FROM sys_user;
result := models.DB.Find(&users)
if result.Error != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "查询失败"})
return
}
// 返回 JSON 格式的数据
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": users,
})
}
config文件夹下config.go文件
package config
type AppConfig struct {
Title string
Host string
Port string
}
// LoadConfig 模拟从 yaml/env 读取配置
func LoadConfig() *AppConfig {
return &AppConfig{
Title: "生产环境核心服务",
Host: "localhost",
Port: "8885",
}
}
swagger.go
package routers
import (
"go_test/config"
"go_test/docs" // 引入 swag 生成的包
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
// SetupSwaggerRouter 注册 Swagger 路由并覆盖配置
func SetupSwaggerRouter(r *gin.Engine, cfg *config.AppConfig) {
// 用从 config 读取的真实数据,覆盖 swag 生成的默认配置
docs.SwaggerInfo.Title = cfg.Title
docs.SwaggerInfo.Host = cfg.Host + ":" + cfg.Port
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
}

浙公网安备 33010602011771号