swagger生成接口文档

swagger生成接口文档 swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具一起使用,以设计、构建、记录和使用RESTful Web服务。Swagger包括自动文档,代码生成和测试用例生成。 在前……

Continue reading

validator库参数校验若干实用技巧

validator库参数校验若干实用技巧 在web开发中一个不可避免的环节就是对请求参数进行校验,通常我们会在代码中定义与请求参数相对应的模型(结构体),借助模型绑定快捷地解析请求中的参数,例如 gin 框架中的Bind和ShouldBind系列方法。本文就以 gin 框架的请求参数校验为例,介绍……

Continue reading

优雅地关机

优雅地关机 什么是优雅关机? 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端友好的关机方式。而执行Ctrl+C关闭服务端时,会强制结束进程导致正在访问的请求出现问题。 如何实现优雅关机? Go 1.8版本之后, http.Server 内置的 Shutdown() 方法就……

Continue reading

使用Air实现Go程序实时热重载

为什么需要实时加载? 之前使用Python编写Web项目的时候,常见的Flask或Django框架都是支持实时加载的,你修改了项目代码之后,程序能够自动重新加载并执行(live-reload),这在日常的开发阶段是十分方便的。 在使用Go语言的gin框架在本地做开发调试的时候,经常需……

Continue reading

使用sqlx批量插入数据的若干方法

在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子,介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认……

Continue reading

使用zap接收gin框架默认的日志并配置日志归档

gin默认的中间件 首先我们来看一个最简单的gin项目: func main() { r := gin.Default() r.GET("/hello", func(c *gin.Context) { c.String("hello liwenzhou.com!") }) r.Run( } 接下来我们看一下gin.Default()的源码: func Default() *Engine { debugPrintWARNINGDefault() engine := New() engine.Use(Logger(), Recovery()) return engine } 也就是我们在使用gin.Default()的同时是用到了gin框架内的两个默认中间件Logger()和Recovery(……

Continue reading

在gin框架中使用JWT

JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token 实现方式,……

Continue reading

如何使用Docker部署Go Web应用

为什么需要Docker? 使用docker的主要目标是容器化。也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机。 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很多的依赖环境或包,甚至对依赖的具体版本都有严格的要求,当开发过程完成后,你希望将应用……

Continue reading

常用的HTTP服务压测工具介绍

HTTP服务压力测试工具 在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。 压测相关术语 响应时间(RT) :指系统对请求作出响应的时间. 吞吐量(Through……

Continue reading

常用限流策略——漏桶与令牌桶介绍

限流又称为流量控制(流控),通常是指限制到达系统的并发请求数,本文列举了常见的限流策略,并以gin框架为例演示了如何为项目添加限流组件。 限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。 我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万……

Continue reading