Gin 路由与路由文件分组的实现实例

 更新时间:2025年11月21日 10:22:39   作者:Koya1_c  
本文主要介绍了Gin 路由与路由文件分组的实现实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

路由

路由(Routing)是由一个 URL(或者叫路径)和一个特定的 HTTP 方法(GET、POST等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。

GET 请求传值

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()
}

使用 Postman 进行测试

动态路由传值

域名/user/20

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()
}

使用 Postman 进行测试

POST 请求传值(获取form表单数据)

add.html

<!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>
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()
}

简单的路由组

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()
}

使用 Postman 进行测试

Gin 路由文件分组

在项目的根目录下新建 routes 文件夹,并新建 go 文件

DefaultRoutes.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, "新闻")
		})
	}
}

AdminRoutes.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")
		})
	}
}

ApiRoutes.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")
		})
	}
}

main.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()
}

到此这篇关于Gin 路由与路由文件分组的实现实例的文章就介绍到这了,更多相关Gin 路由与路由文件分组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言reflect.TypeOf()和reflect.Type通过反射获取类型信息

    Go语言reflect.TypeOf()和reflect.Type通过反射获取类型信息

    这篇文章主要介绍了Go语言reflect.TypeOf()和reflect.Type通过反射获取类型信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • golang 数组随机排序的实现

    golang 数组随机排序的实现

    本文主要介绍了golang 数组随机排序的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Golang操作DuckDB实战案例分享

    Golang操作DuckDB实战案例分享

    DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性,凭借其在以内存为中心的环境中处理高速分析的能力,它迅速受到数据科学家和分析师的欢迎,在这篇博文中,我们将探索在Go中使用DuckDB
    2025-01-01
  • 详解Go语言中的数据库操作

    详解Go语言中的数据库操作

    数据库是应用开发中必须要掌握的技巧。这篇文章主要和大家介绍一下Go语言中相关的数据库操作,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02
  • Golang打印复杂结构体两种方法详解

    Golang打印复杂结构体两种方法详解

    在 Golang 语言开发中,我们经常会使用结构体类型,如果我们使用的结构体类型的变量包含指针类型的字段,我们在记录日志的时候,指针类型的字段的值是指针地址,将会给我们 debug 代码造成不便
    2022-10-10
  • Web框架Gin中间件实现原理步骤解析

    Web框架Gin中间件实现原理步骤解析

    这篇文章主要为大家介绍了Web框架Gin中间件实现原理步骤解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 代码之美:探索Go语言断行规则的奥秘

    代码之美:探索Go语言断行规则的奥秘

    Go语言是一门以简洁、清晰和高效著称的编程语言,而断行规则是其代码风格的重要组成部分,通过深入研究Go语言的断行规则,我们可以更好地理解和编写优雅的代码,本文将从语法规范、代码风格和最佳实践等方面进行探讨,帮助读者更好地理解和应用Go语言的断行规则
    2023-10-10
  • Go语言实现ssh&scp的方法详解

    Go语言实现ssh&scp的方法详解

    这篇文章主要为大家详细介绍了如何利用Go语言实现ssh&scp,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Go语言实战学习之流程控制详解

    Go语言实战学习之流程控制详解

    这篇文章主要为大家详细介绍了Go语言中的流程控制,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助 ,需要的朋友可以参考下
    2022-08-08
  • Go语言web快速开发框架Gin的HttpRouter路由的使用

    Go语言web快速开发框架Gin的HttpRouter路由的使用

    in框架内部使用了高性能的路由器库httprouter,支持动态参数匹配和简洁的接口,本文主要介绍了Go语言web快速开发框架Gin的HttpRouter路由的使用,感兴趣的可以了解一下
    2025-03-03

最新评论