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

目录结构

image

配置使用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))
}

posted @ 2026-07-03 16:05  freps  阅读(4)  评论(0)    收藏  举报