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 路由与路由文件分组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Golang如何实现一个环形缓冲器

    详解Golang如何实现一个环形缓冲器

    环形缓冲器(ringr buffer)是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。本文将利用Golang实现一个环形缓冲器,需要的可以参考一下
    2022-09-09
  • GO语言临界资源安全问题的深入理解

    GO语言临界资源安全问题的深入理解

    临界资源安全问题也就是以往我们常听到的线程安全问题,本文详细的介绍了GO语言临界资源安全问题的深入理解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Golang中println和fmt.Println区别解析

    Golang中println和fmt.Println区别解析

    Golang 中打印数据通常使用 fmt.Println() 方法,也可以使用内置的 println() 方法。这两个方法大家可能都使用过,它们的区别是什么呢?本文给大家详细讲解,感兴趣的朋友跟随小编一起看看吧
    2023-03-03
  • Go进行接口组合的解决方案

    Go进行接口组合的解决方案

    在 Go 语言中,接口组合是一种强大的特性,它允许将多个接口组合成一个新的接口,从而提供更灵活和可扩展的代码设计,本文给大家介绍了Go如何进行接口组合,需要的朋友可以参考下
    2024-06-06
  • Golang爬虫及正则表达式的实现示例

    Golang爬虫及正则表达式的实现示例

    本文主要介绍了Golang爬虫及正则表达式的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Go语言使用templ实现编写HTML用户界面

    Go语言使用templ实现编写HTML用户界面

    templ是一个在 Go 中编写 HTML 用户界面的语言,使用 templ,我们可以创建可呈现 HTML 片段的组件,下面就跟随小编一起了解一下具体的实现方法吧
    2023-12-12
  • Go定时器cron的使用详解

    Go定时器cron的使用详解

    本篇文章主要介绍了Go定时器cron的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Golang使用gin框架实现一个完整的聊天室功能

    Golang使用gin框架实现一个完整的聊天室功能

    由于我们项目的需要,我就研究了一下关于websocket的相关内容,去实现一个聊天室的功能,经过几天的探索,现在使用Gin框架实现了一个完整的聊天室+消息实时通知系统,感兴趣的小伙伴欢迎阅读本文
    2023-08-08
  • Gin框架使用panic处理中间件问题详解

    Gin框架使用panic处理中间件问题详解

    这篇文章主要介绍了Gin框架使用panic处理中间件问题,在 Gin 框架中,错误处理和 panic 处理是非常重要的功能。当处理 HTTP 请求时,可能会出现各种各样的错误,例如数据库连接错误、网络错误、权限问题等等
    2023-04-04
  • Go语言中的逃逸分析究竟是什么?

    Go语言中的逃逸分析究竟是什么?

    这篇文章主要介绍了Go语言中的逃逸,套哟究竟是什么呢?通俗来讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了“逃逸”。下面文章将详细介绍Go语言中的逃逸,需要的朋友可以参考一下
    2021-09-09

最新评论