最近在学习使用Go搭建web后端框架。项目中需要集成路由,这里记录下我在集成Gin框架的全过程。
初始化项目
mkdir project
cd project
go mod init project
touch main.go
下载Gin
go get github.com/gin-gonic/gin
在main.go 主函数中,首先开始复制下Gin官方示例的代码
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run()
}
运行代码之后,通过curl命令来简单测试一下
curl http://localhost:8080/ping
# 可以得到如下结果,说明当前接口是可以掉通的
#{"message":"pong"}#
到这里已经完成了最简单的发送请求的功能。接下来我们对代码进行一些封装
封装 SetupRouter函数
一般来讲,我们不会将太多的代码放到main函数中直接使用,而是封装一些方法,然后再在main 函数中去调用。我这里会将 SetupRouter 函数封装到 bootStrap 文件夹里面。bootstrap文件夹主要放一些需要初始化的方法,例如 初始化路由,数据库,Redis等等。
mkdir bootstrap
touch bootstrap/route.go
// bootstrap/route.go
package bootstrap
import "github.com/gin-gonic/gin"
func SetupRoute(r *gin.Engine) {
//使用中间件
r.Use(
gin.Logger(),
gin.Recovery(),
)
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
}
//main.go 修改成如下代码
package main
import (
"project/bootstrap"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.New() // 没有使用defaul,是因为这里拆开之后,在setup里面可以自定义配置一些gin的中间件
bootstrap.SetupRoute(r)
r.Run()
}
接下来修改route.go 里面的代码
// route.go
package bootstrap
import (
"strings"
"github.com/gin-gonic/gin"
)
func SetupRoute(r *gin.Engine) {
registerMiddleware(r)
//这里添加业务路由
registerNotFoundRoute(r)
}
//用于注册中间件
func registerMiddleware(r *gin.Engine) {
r.Use(
gin.Logger(),
gin.Recovery(),
)
}
//配置404路由
func registerNotFoundRoute(r *gin.Engine) {
r.NoRoute(func(c *gin.Context) {
accept := c.Request.Header.Get("Accept")
if strings.Contains(accept, "text/html") {
c.String(404, "404 page not found")
} else {
c.JSON(404, gin.H{
"code": 404,
"message": "404 page not found",
})
}
})
}
在registerMiddleware 函数里面,可以注册其他的中间件,registerNotFoundRoute 配置404路由。剩下的业务路由,我们统一的放在routes文件夹下面。
mkdir routes
touch routes/api.go
//routes/api.go
package routes
import "github.com/gin-gonic/gin"
func RegisterApiRoute(r *gin.Engine) {
api := r.Group("/api")
{
api.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
}
}
在SetupRouter函数里面调用
//bootstrap/route.go
package bootstrap
import (
"project/routes"
"strings"
"github.com/gin-gonic/gin"
)
func SetupRoute(r *gin.Engine) {
registerMiddleware(r)
routes.RegisterApiRoute(r) //这里注册业务路由
registerNotFoundRoute(r)
}
至此已完成最基础的封装。所有的业务路由都在 routes 文件夹中,路由的基建都在bootstrap 里面的 route.go 实现。
完