今日话题
基于 go + gin 实现增删改查,仅仅只是提供接口不涉及数据库增删改查
作者:云层上的光
时间:2024年6月22日 10时15分14秒
主线任务
一、项目创建
1、创建 demo-crud 文件夹
2、编辑器打开 demo-crud 项目,提示设置 go sdk,这里我设置了 1.22.4
3、声明 go.mod 文件
go mod init github.com/chuxin-cs/demo-crud
二、实现增删改查
1、新建 main.go 入口文件,修改 package 为 main
2、添加 main 方法
package main
import "fmt"
func main() {
fmt.Println("demo-crud...")
}
3、提供 增删改查 方法
package main
import "fmt"
// 增
func add() {
fmt.Println("add")
}
// 删
func del() {
fmt.Println("del")
}
// 改
func edit() {
fmt.Println("edit")
}
// 查
func getList() {
fmt.Println("getList")
}
func main() {
fmt.Println("demo-crud...")
add()
del()
edit()
getList()
}
4、输出打印
三、gin 实现增删改查
1、安装 gin 包,如果遇到报错看 支线任务一
go get -u github.com/gin-gonic/gin
2、编写 gin 代码
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
// 主函数,程序入口
func main() {
// 打印信息,标记示例启动
fmt.Println("demo-crud...")
// 初始化Gin框架,默认装载中间件
r := gin.Default()
// 定义GET请求的路由"/add",处理函数接收一个gin.Context上下文参数
r.GET("/add", func(c *gin.Context) {
// 向发送请求的客户端响应状态码200(成功)和字符串"add"
c.String(200, "add")
})
// 启动服务器,监听9000端口
// 前端可以通过访问"http://localhost:9000/add"来与这个接口进行交互
r.Run(":9000")
}
3、改造回调函数,完成增删改查
package main
import (
"github.com/gin-gonic/gin"
)
// 增
func add(c *gin.Context) {
c.String(200, "add")
}
// 删
func del(c *gin.Context) {
c.String(200, "del")
}
// 改
func edit(c *gin.Context) {
c.String(200, "edit")
}
// 查
func getList(c *gin.Context) {
c.String(200, "getList")
}
func main() {
r := gin.Default()
r.GET("/add", add)
r.GET("/del", del)
r.GET("/edit", edit)
r.GET("/getList", getList)
// 运行在 9000 端口
r.Run(":9000")
}
四、改造 gin 目录结构
1、新建 router 文件夹,然后再新建 index.go 文件
代码如下:
package router
import "github.com/gin-gonic/gin"
// Add 增
func Add(c *gin.Context) {
c.String(200, "add")
}
// Del 删
func Del(c *gin.Context) {
c.String(200, "del")
}
// Edit 改
func Edit(c *gin.Context) {
c.String(200, "edit")
}
// GetList 查
func GetList(c *gin.Context) {
c.String(200, "getList")
}
2、main.go 中改造
代码如下:
package main
import (
"github.com/chuxin-cs/demo-crud/router"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/add", router.Add)
r.GET("/del", router.Del)
r.GET("/edit", router.Edit)
r.GET("/getList", router.GetList)
// 运行在 9000 端口
r.Run(":9000")
}
3、主入口程序中 其实不应该写这些代码,后续逻辑涉及到要用结构体,所以留到下期再写 TODO
支线任务
一、下载 gin 依赖失败
go 的插件包需要从 github上下载,网络问题这里就不多提了
其他语言都一样,我们前端的 npm 仓库在国外,依赖下载也会存在失败的情况,所以会通过设置淘宝镜像代理方案解决:
npm config set registry https://registry.npmmirror.com
所以 go 也是一样的,会存在依赖下载失败,以下是go 的通用解决办法:
1、Go modules 是 Go 1.11 版本引入的包管理工具,用于管理和版本控制项目的依赖项,
- 网上这么说还是不是太明白,先设置吧,后续再研究 TODO
go env -w GO111MODULE=on
2、配置 proxy 代理,这一步操作和前端设置镜像是一个道理
go env -w GOPROXY=https://goproxy.cn,direct
3、查看配置是否修改成功
go env
4、gin 依赖下载
二、go get 下载依赖包?
1、go 代码中,下载 gin 包,使用 go get 命令
go get -u github.com/gin-gonic/gin
2、如果说 go get 是下载包的命令 那么这里的 -u 又是什么呢?
go get -u 命令的作用是用于更新依赖包到最新版本,那不就是说直接给我上最新依赖
那这就等价于前端的 latest 功能,安装axios最新版
npm i -S axios@latest
三、go mod tidy 也是下载依赖?
go mod tidy 是一个用于整理和优化 Go 模块依赖的命令。具体来说,它会执行以下操作:
- 移除未使用的依赖:删除 go.mod 文件中声明但在代码中未使用的包。
- 添加缺少的依赖:为代码中使用但未在 go.mod 文件中声明的包添加相应的依赖。
- 更新 go.sum 文件:确保 go.sum 文件中的校验和与依赖项的一致性。
简单来说,go mod tidy 可以帮助你保持模块依赖的整洁和一致。
1、听着很懵,换前端怎么理解呢,其实相当于前端拿到新项目之后,一把安装依赖的:
npm i
2、那就是说,下载 go 包我就
go get -u 项目包
3、拿到新的 go 项目,我就一把梭
go mod tidy
四、go 程序也存在回调函数,那我就放心了
1、定义 add 方法时,提供了回调函数,那么这块的玩法思路回到了前端的编程思路中
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
fmt.Println("demo-crud...")
r := gin.Default()
r.GET("/add", func(c *gin.Context) {
c.String(200, "add")
})
// 运行在 9000 端口
r.Run(":9000")
}
2、改造回调函数
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func add(c *gin.Context){
c.String(200, "add")
}
func main() {
fmt.Println("demo-crud...")
r := gin.Default()
// 抽离一个 add 方法出去
r.GET("/add", add)
// 运行在 9000 端口
r.Run(":9000")
}
五、gin.Default 的作用?
gin.Default() 在 Gin 框架中是一个便捷函数,它的作用是创建一个新的 gin.Engine 实例,并默认注册一些中间件,包括:
- Logger: 提供请求日志记录。
- Recovery: 当发生 panic 时自动恢复,避免服务崩溃,并记录 panic 的详细信息,虽然现在还不能完全看懂源码,但是我大致知道这里干了啥
1、简单点理解就是,gin.Default() 大致相当于在 Koa 中做了两件事: