随笔分类 - gin
golang框架gin
摘要:gin启动服务的三种方式 func main() { engine := gin.Default() engine.GET("/", func(context *gin.Context) { context.JSON(200, gin.H{"msg": "OK2"}) }) // 启动http服务的
阅读全文
摘要:package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" "reflect" "runtime" ) func main() { r := gin.New() // 1. 添加中间件 r.Use(gin.Logger(), g
阅读全文
摘要:package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() // 如果不设置代理,默认信任所有的代理 _ = r.SetTrustedProxies([]st
阅读全文
摘要:gin框架的路由结构剖析 路由是web框架的核心功能,在学习gin路由前,路由是这样的,比如定义了两个路由/user/get, /user/delete 则会构造出拥有三个节点的路由树,根节点是user,两个子节点分别是:get、delete 上述是一种实现路由的方式,且比较直观,容易理解,对url
阅读全文
摘要:package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" "os" "path/filepath" ) func main() { router := gin.Default() // 加载指定目录下的所有文件 //route
阅读全文
摘要:gin中间件详解 package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" "time" ) func main() { r := gin.New() // 使用Logger和Recovery中间件 r.Use(gin.Log
阅读全文
摘要:安装 go-playground/validator go get github.com/go-playground/validator/v10 代码如下 package main import ( "fmt" "net/http" "reflect" "strings" "github.com/g
阅读全文
摘要:gin的路由算法 gin的是路由算法其实就是一个Trie树(也就是前缀树). 有关数据结构的可以自己去网上找相关资料查看. 注册路由预处理 我们在使用gin时通过下面的代码注册路由 普通注册 router.GET("/ping", func(context *gin.Context) { conte
阅读全文
摘要:Gin封装的最好的地方就是context和对response的处理. github的README的介绍,基本就是对这两个东西的解释. 本篇文章主要解释context的使用方法, 以及其设计原理 为什么要将Request的处理封装到Context中 在阅读gin的源码时, 请求的处理是使用type H
阅读全文
摘要:数据如何在gin中流转 func main() { gin.SetMode(gin.DebugMode) // 设置为开发模式 router := gin.Default() _ = router.SetTrustedProxies([]string{"172.19.10.13"}) // 设置信任
阅读全文
摘要:gin框架预览 router.Run()的源码: func (engine *Engine) Run(addr ...string) (err error) { defer func() { debugPrintError(err) }() if engine.isUnsafeTrustedProx
阅读全文
摘要:package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { gin.SetMode("release") // 设置为生产模式 r := gin.Default() r.SetTrustedProxies([]stri
阅读全文
摘要:概念 权限管理几乎是每个系统或者服务都会直接或者间接涉及的部分. 权限管理保障了资源(大部分时候就是数据)的安全, 权限管理一般都是和业务强关联, 每当有新的业务或者业务变化时, 不能将精力完全放在业务实现上, 权限的调整往往耗费大量的精力. 其实, 权限的本质没有那么复杂, 只是对访问的控制而已,
阅读全文
摘要:生成解析token 如今有很多将身份验证内置到API中的方法 -JSON Web令牌只是其中之一。JSON Web令牌(JWT)作为令牌系统而不是在每次请求时都发送用户名和密码,因此比其他方法(如基本身份验证)具有固有的优势。要了解更多信息,请直接进入jwt.io上的介绍,然后再直接学习。 以下是J
阅读全文
摘要:Air实时加载 本章我们要介绍一个神器——Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率。 1.1.1. 为什么需要实时加载? 之前使用Python编写Web项目的时候,常见的Flask或Django框架都是支持实时加载的,你修改了项目代码之
阅读全文
摘要:结构体验证 用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多。 处理请求方法 func structValidator(context *gin.Context) { var person Person if err := context.ShouldBind(&person
阅读全文
摘要:功能和验证码使用原理 本案例中没有使用redis作为缓存,而是使用的内存存储方法 github链接地址 下载命令 go get github.com/mojocn/base64Captcha 请求处理函数 // 生成图片验证码 func (m *MemberController) captcha(c
阅读全文
摘要:浏览器发送options预检请求的前提: 在非简单请求且跨域的情况下,浏览器会发起options预检请求 简单请求 需要满足以下两个条件 1. 请求方法 get head post 2. http的头信息不超过以下几种字段 Accept Accept-Language Content-Languag
阅读全文
摘要:Cookie介绍 Http协议是无状态的,服务器不能记录浏览器的访问状态,也就是说服务器不能判断请求的客户端是否已经登录 Cookie就是解决http协议无状态的方案之一 Cookie实际上就是服务器保存在浏览器上的一小段文本信息,浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发
阅读全文
摘要:全局中间件 所有请求都经过此中间件 中间件中设置值 func MiddleWare() gin.HandlerFunc { return func(context *gin.Context) { t := time.Now() fmt.Println("中间件开始执行了") // 设置变量到Cont
阅读全文