go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件

gin介绍

Gin 是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。
对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错
借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助干团队的编码风格和形成规范

gin安装

go get -u  github.com/gin-gonic/gin

gin路由

func main()  {
    
    
	//创建路由
	r :=gin.Default()

	//绑定路由,执行的函数
	//gin.Context,封装了request和respose
	r.GET("/", func(c *gin.Context) {
    
    
		c.String(http.StatusOK,"hello hello")
	})
	r.Run(":8080")

}

浏览输入:localhost:8080即可。

gin实现简单的表单提交

main.go
在这里插入图片描述
前端页面html
在这里插入图片描述

gin实现文件上传

前端页面html
在这里插入图片描述
main.go
在这里插入图片描述
限制大小的文件上传并上传多个文件
在这里插入图片描述

gin路由组

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main()  {
    
    
	//创建路由
	r :=gin.Default()
	v1 := r.Group("/v1")
	{
    
    
		v1.GET("/login",login)
		v1.GET("/registry",registry)
	}
	v2 := r.Group("/v2")
	{
    
    
		v2.POST("/login",login)
		v2.POST("/registry",registry)
	}

	//绑定路由,执行的函数
	//gin.Context,封装了request和respose
	r.GET("/", func(c *gin.Context) {
    
    
		c.String(http.StatusOK,"hello hello")
	})
	r.Run(":8080")

}

func login(c *gin.Context)  {
    
    
	name := c.DefaultQuery("name","jack")
	c.String(200,fmt.Sprintf("login: hello %s\n",name))
}

func registry(c *gin.Context)  {
    
    
	name := c.DefaultQuery("name","jack")
	c.String(200,fmt.Sprintf("registry: hello %s\n",name))
}

浏览器输入:
在这里插入图片描述
在这里插入图片描述

gin路由原理

httprpter会将所有的路由规则构造一棵前缀树
在这里插入图片描述

gin数据解析和绑定

结构体:

type Login struct {
    
    

	User     string `form:"username" json:"user" url:"user" xml:"user" binding:"required"`
	Password string `form:"password" json:"password" url:"password" xml:"password" binding:"required"`
}

json数据解析和绑定

r :=gin.Default()
	//绑定路由,执行的函数
	//gin.Context,封装了request和respose
	r.GET("/", func(c *gin.Context) {
    
    
		var json Login
		err := c.ShouldBindJSON(&json)
		if err != nil {
    
    
			//返回错误
			c.JSON(500,gin.H{
    
    "error":err.Error()})
		}
		fmt.Println(json.User,json.Password)
		c.String(200,fmt.Sprintf("login: user = %s,password = %s \n",json.User,json.Password))
		//c.JSON(200,json)
	})
	r.Run(":8080")

postman调用:
在这里插入图片描述

表单绑定

r.GET("/", func(c *gin.Context) {
    
    
		var form Login
		if err :=c.Bind(&form); err != nil{
    
    
			//返回错误
			c.JSON(500,gin.H{
    
    "error":err.Error()})
		}
		c.JSON(http.StatusOK,gin.H{
    
    "ok":form})
	})
	r.Run(":8080")

postman测试结果:
在这里插入图片描述

url数据解析和绑定

r.POST("/:user/:password", func(c *gin.Context) {
    
    
		var login Login
		//如果想用地址栏拼参数的方法,例如:http://localhost:8000/gin?user=zhangsan&password=123
		//可以用c.Query("key")来获取值
		err := c.ShouldBindUri(&login)
		if err != nil {
    
    
			//返回错误
			c.JSON(500,gin.H{
    
    "error":err.Error()})
		}
		fmt.Println(login.User,login.Password)
		//c.String(200,fmt.Sprintf("login: user = %s,password = %s \n",login.User,login.Password))
		//c.JSON(200,json)
		c.JSON(http.StatusOK,gin.H{
    
    "ok":login})
	})
	r.Run(":8080")

postman测试:
在这里插入图片描述

gin中间件

在这里插入图片描述

全局中间件

在这里插入图片描述
在这里插入图片描述
控制台效果:
在这里插入图片描述

局部中间件

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ydl1128/article/details/126360673