【Gin】Gin 路由与路由文件分组

本文介绍了Gin框架中处理HTTP请求的方法,包括GET请求传值、动态路由传值、POST请求获取表单数据,以及简单的路由组和路由文件分组的实现。示例代码详细展示了如何使用Gin进行参数获取和响应构建。
摘要由CSDN通过智能技术生成


作者的 Gin 框架学习是根据 B站视频 Gin教程_Golang框架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"><br><br>
  密码 <input type="password" name="password"><br><br>
  <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()
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值