初始化 gin 引擎后获得 gin 引擎对象,通过引擎对象的 GET、POST、PUT、DELETE、Any 方法来定义路由。
package main
import "github.com/gin-gonic/gin"
func main() {
// 初始化 Gin 引擎
gin.SetMode(gin.ReleaseMode)
r := gin.New()
// 定义首页路由
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello",
})
})
// 定义关于其他路由
r.GET("/News", func(ctx *gin.Context) {
ctx.Writer.Write([]byte("新闻"))
})
// 启动 web 服务
r.Run(":80")
}
Any 代表路由可以接受 GET、POST、PUT、DELETE 任何模式,可以使用 ctx.Request.Method 获取请求类型 :
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
// 初始化 Gin 引擎
gin.SetMode(gin.ReleaseMode)
r := gin.New()
// 定义首页路由
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello",
})
})
// 定义关于其他路由
r.Any("/Any", func(ctx *gin.Context) {
requestMethod := ctx.Request.Method
fmt.Printf("requestMethod: %v\n", requestMethod)
})
// 启动 web 服务
r.Run(":80")
}
可以通过 r.Group() 函数来实现路由分组,例如将路由划分为网站前端和后端 :
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
// 初始化 Gin 引擎
r := gin.Default()
// 网站前台分组
frontGroup := r.Group("/")
frontGroup.GET("/", func(ctx *gin.Context) {
ctx.Writer.Write([]byte("首页"))
})
// 网站后台分组
AdminGroup := r.Group("/Admin")
AdminGroup.GET("/", func(ctx *gin.Context) {
ctx.Writer.Write([]byte("后台首页"))
})
r.Run(":80")
}
访问 localhost 匹配网站前端路由;
访问 localhost/Admin 匹配网站后台路由;
可以将路由抽离为一个或者多个文件,使您的项目结构更加合理,下面我们样式将上面的路由抽离为前端、后端2个路由文件:
1. 创建文件 /router 文件夹
2. 创建 /router/front.go 文件,编写如下代码 :
package router
import "github.com/gin-gonic/gin"
// 网站前台分组
func Front(r *gin.Engine) {
frontGroup := r.Group("/")
frontGroup.GET("/", func(ctx *gin.Context) {
ctx.Writer.Write([]byte("首页"))
})
}
3. 创建 /router/admin.go 文件,编写如下代码 :
package router
import "github.com/gin-gonic/gin"
// 网站前台分组
func Admin(r *gin.Engine) {
// 网站后台分组
AdminGroup := r.Group("/Admin")
AdminGroup.GET("/", func(ctx *gin.Context) {
ctx.Writer.Write([]byte("后台首页"))
})
}
4. 在 main.go 中应用路由
import (
"gotest/router"
"github.com/gin-gonic/gin"
)
func main() {
// 初始化 Gin 引擎
r := gin.Default()
router.Front(r)
router.Admin(r)
r.Run(":80")
}
5. 运行,体验效果,至此路由文件抽离完毕。