第几个夏天 發表於 2025-11-21 10:22:39

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&amp;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;">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Title&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form action="/toAdd" method="post"&gt;
用户名 &lt;input type="text" name="username"&gt;


密码 &lt;input type="password" name="password"&gt;


&lt;input type="submit" value="提交"&gt;
&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;
</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]
查看完整版本: Gin 路由与路由文件分组的实现实例