人生是不能回头的 每走一步都会有不同的结果 一切都是唯一的 包括遗憾
代码结构整理示例
可以根据我的结构创建文件 以节省时间精力 随个人心意
第一 在路由文件中编写路由地址 详情看注释
package router
import (
"ginchat/service"
"github.com/gin-gonic/gin"
)
func Router() *gin.Engine {
//gin框架默认路由引擎
r := gin.Default()
//定义路由地址及调用函数
r.GET("/index", service.GetIndex)
r.GET("/get_user_list", service.UserList)
//返回定义好的路由对象
return r
}
第二 编写路由中 即将调用的 封装好的函数
Index.go
package service
import "github.com/gin-gonic/gin"
func GetIndex(c *gin.Context) {
//返回json数据
c.JSON(200, gin.H{
"message": "Hello World",
})
}
user_services.go
package service
import (
"ginchat/models"
"github.com/gin-gonic/gin"
)
func UserList(c *gin.Context) {
//获取返回的数据集
data := models.GetUserList()
//返回json格式数据到客户端
c.JSON(200, gin.H{
"data": data,
})
}
编写 GetUserList函数
func GetUserList() []*UserBasic {
//[]*UserBasic 返回值声明 为 GetUserList 声明返回数据集为 []*UserBasic 切片
// 在内存中开辟空间 定义返回数据集的长度为 10
data := make([]*UserBasic, 10)
//执行查询语句 并将数据存放在开辟好的内存地址
utils.DB.Find(&data)
//循环打印测试 range关键字的作用是遍历data数组中的所有元素
for _, v := range data {
fmt.Println(v)
}
//返回数据集
return data
}
第三 编写config.yml中的 mysql配置
mysql:
#待拆分
dsn: root:root@tcp(127.0.0.1:3306)/ginchat?charset=utf8mb4&parseTime=True&Local
#拆分后示例 未采用
host: 127.0.0.1
port: 3306
user: root
password: root
dbname: ginchat
charset: utf8mb4
parseTime: True
loc: Asia/Shanghai
第四 编写config_init
package utils
import (
"fmt"
"github.com/spf13/viper"
)
func ConfigInit() {
//读取config.yaml配置文件并解析
viper.SetConfigName("config")
// 指定config.yaml配置文件路径 注册在viper中
viper.AddConfigPath("config")
// 若config.yaml配置文件读取失败,会报panic并停止运行
err := viper.ReadInConfig()
// 若config.yaml配置文件读取失败会打印输出的错误信息
if err != nil {
fmt.Println(err)
}
// 打印读取到的config.yaml中的值
fmt.Println("config mysql", viper.Get("mysql"))
}
编写mysql_init.go
package utils
import (
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB // 声明一个包级别的变量DB,也就是*gorm.DB的指针
// MysqlInit 函数用于初始化MySQL数据库连接
func MysqlInit() {
// 使用gorm.Open函数连接MySQL数据库
DB, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dsn")), &gorm.Config{})
}
编写system_init.go
package utils
func SystemInit() {
// 初始化配置文件
ConfigInit()
// 初始化 MySQL数据库连接
MysqlInit()
}
第五 编写main.go应用程序
package main
import (
"ginchat/router"
"ginchat/utils"
)
func main() {
//初始化配置文件
utils.SystemInit()
//初始化路由配置
r := router.Router()
//启动gin并监听端口 8088
//运行应用
r.Run(":8088") // 监听并在 0.0.0.0:8080 上启动服务
}
请求在当前应用程序的主体流程
- 首先在web端发起请求
- 请求访问指定的地址和端口
- 请求抵达 Go应用程序
- 程序运行main.go
- 初始化配置文件 路由文件
- 根据路由地址调用指定的函数
- getUserList示例
- 查询数据集后返回
- 转 Json格式 状态码为 200
- 返回数据后 请求生命周期结束