Gin 路由与路由文件分组的实现实例
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">路由</a></li><li><a href="#_label1">GET 请求传值</a></li><li><a href="#_label2">动态路由传值</a></li><li><a href="#_label3">POST 请求传值(获取form表单数据)</a></li><li><a href="#_label4">简单的路由组</a></li><li><a href="#_label5">Gin 路由文件分组</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>路由</h2><p>路由(Routing)是由一个 URL(或者叫路径)和一个特定的 HTTP 方法(GET、POST等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。</p>
<p class="maodian"><a name="_label1"></a></p><h2>GET 请求传值</h2>
<div class="jb51code"><pre class="brush:go;">package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// localhost:8080/get?username=zhangsan&password=123
r.GET("/get", func(c *gin.Context) {
// 使用c.Query()获取请求当中的参数
username := c.Query("username")
password := c.Query("password")
// 当请求路径当中没有带有 age 参数时,使用默认值18
age := c.DefaultQuery("age", "18")
c.JSON(http.StatusOK, gin.H{
"msg": "Get...",
"username": username,
"password": password,
"age": age,
})
})
r.Run()
}
</pre></div>
<p>使用 Postman 进行测试</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112110181834.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112110181879.png" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>动态路由传值</h2>
<p>域名/user/20</p>
<div class="jb51code"><pre class="brush:go;">package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/user/:uid", func(c *gin.Context) {
// 使用c.Param()获取请求当中的参数
uid := c.Param("uid")
c.JSON(http.StatusOK, gin.H{
"msg": "动态路由传值...",
"uid": uid,
})
})
r.Run()
}
</pre></div>
<p>使用 Postman 进行测试</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112110181815.png" /></p>
<p class="maodian"><a name="_label3"></a></p><h2>POST 请求传值(获取form表单数据)</h2>
<p>add.html</p>
<div class="jb51code"><pre class="brush:xhtml;"><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/toAdd" method="post">
用户名 <input type="text" name="username">
密码 <input type="password" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
</pre></div>
<div class="jb51code"><pre class="brush:go;">package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 配置模板的文件
r.LoadHTMLGlob("templates/*")
// 输入localhost:8080/add 跳转到add.html页面
r.GET("/add", func(c *gin.Context) {
c.HTML(200, "add.html", gin.H{})
})
r.POST("/toAdd", func(c *gin.Context) {
// 使用c.PostForm()获取请求当中的参数
username := c.PostForm("username")
password := c.PostForm("password")
// 当表单当中没有 age ,使用默认值18
age := c.DefaultPostForm("age", "18")
c.JSON(200, gin.H{
"username": username,
"password": password,
"age": age,
})
})
r.Run()
}
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112110181794.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112110181741.png" /></p>
<p class="maodian"><a name="_label4"></a></p><h2>简单的路由组</h2>
<div class="jb51code"><pre class="brush:go;">package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
userRoutes := r.Group("/user")
{
userRoutes.GET("/add", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "userAdd...",
})
})
userRoutes.GET("/edit", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "userEdit...",
})
})
}
adminRoutes := r.Group("/admin")
{
userRoutes.GET("/add", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "adminAdd...",
})
})
userRoutes.GET("/edit", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "adminEdit...",
})
})
}
r.Run()
}
</pre></div>
<p>使用 Postman 进行测试</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112110181832.png" /></p>
<p class="maodian"><a name="_label5"></a></p><h2>Gin 路由文件分组</h2>
<p>在项目的根目录下新建 routes 文件夹,并新建 go 文件</p>
<p>DefaultRoutes.go</p>
<div class="jb51code"><pre class="brush:go;">package routes
import "github.com/gin-gonic/gin"
func DefaultRoutesInit(r *gin.Engine) {
defaultRoutes := r.Group("/")
{
defaultRoutes.GET("/", func(c *gin.Context) {
c.String(200, "首页")
})
defaultRoutes.GET("/news", func(c *gin.Context) {
c.String(200, "新闻")
})
}
}
</pre></div>
<p>AdminRoutes.go</p>
<div class="jb51code"><pre class="brush:go;">package routes
import "github.com/gin-gonic/gin"
func AdminRoutesInit(r *gin.Engine) {
adminRoutes := r.Group("/admin")
{
adminRoutes.GET("/", func(c *gin.Context) {
c.String(200, "admin...")
})
adminRoutes.GET("/userlist", func(c *gin.Context) {
c.String(200, "admin---userlist")
})
adminRoutes.GET("/plist", func(c *gin.Context) {
c.String(200, "admin---plist")
})
}
}
</pre></div>
<p>ApiRoutes.go</p>
<div class="jb51code"><pre class="brush:go;">package routes
import "github.com/gin-gonic/gin"
func ApiRoutesInit(r *gin.Engine) {
apiRoutes := r.Group("/api")
{
apiRoutes.GET("/", func(c *gin.Context) {
c.String(200, "我是一个api接口")
})
apiRoutes.GET("/userlist", func(c *gin.Context) {
c.String(200, "我是一个api接口---userlist")
})
apiRoutes.GET("/plist", func(c *gin.Context) {
c.String(200, "我是一个api接口---plist")
})
}
}
</pre></div>
<p>main.go</p>
<div class="jb51code"><pre class="brush:go;">package main
import (
"Gin_demo/routes"
"fmt"
"github.com/gin-gonic/gin"
"html/template"
"time"
)
func main() {
r := gin.Default()
// 配置模板的文件
r.LoadHTMLGlob("templates/*")
// 配置静态web目录第一个参数表示路由,第二个参数表示映射的路径.
r.Static("/static", "./static")
routes.DefaultRoutesInit(r)
routes.ApiRoutesInit(r)
routes.AdminRoutesInit(r)
r.Run()
}
</pre></div>
頁:
[1]