入门第三章 Go语言封装代码及编写简易的web应用(全程干货无废话)

130 阅读2分钟

人生是不能回头的 每走一步都会有不同的结果 一切都是唯一的 包括遗憾

代码结构整理示例

可以根据我的结构创建文件 以节省时间精力 随个人心意 image.png

第一 在路由文件中编写路由地址 详情看注释

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 上启动服务
}

请求在当前应用程序的主体流程

  1. 首先在web端发起请求
  2. 请求访问指定的地址和端口
  3. 请求抵达 Go应用程序
  4. 程序运行main.go
  5. 初始化配置文件 路由文件
  6. 根据路由地址调用指定的函数
  7. getUserList示例
  8. 查询数据集后返回
  9. 转 Json格式 状态码为 200
  10. 返回数据后 请求生命周期结束