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
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第1张图片
前端页面html
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第2张图片

gin实现文件上传

前端页面html
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第3张图片
main.go
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第4张图片
限制大小的文件上传并上传多个文件
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第5张图片

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

浏览器输入:
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第6张图片
在这里插入图片描述

gin路由原理

httprpter会将所有的路由规则构造一棵前缀树
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第7张图片

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调用:
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第8张图片

表单绑定

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测试结果:
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第9张图片

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测试:
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第10张图片

gin中间件

在这里插入图片描述

全局中间件

go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第11张图片
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第12张图片
控制台效果:
go语言的gin介绍、路由组设置、数据解析和绑定以及gin中间件_第13张图片

局部中间件

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

你可能感兴趣的:(go语言,中间件,gin,golang,go)