整合限流策略
整合限流策略限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数 常用的限流策略漏桶法 漏桶法限流很好理解,假设我们有一个水桶按固定的速率向下方滴落一滴水,无论有多少请求,请求的速率有多大,都按照固定的速率流出,对应到系统中就是按照固定的速率处理请求 uber-go/ratelimit实现 uber-go/ratelimit Example uber-go/ratelimit1234567891011121314151617181920212223242526272829// 漏桶法// 定义全局限流器对象var rateLimit ratelimit.Limiter// 在 gin.HandlerFunc 加入限流逻辑func leakyBucket() gin.HandlerFunc { prev := time.Now() return func(c *gin.Context) { now := rateLimit.Take() fmt.Println(now.Sub(prev)) // 为了打印时间...
整合管理配置 - viper
整合管理配置 - viper Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式 viper是一个配置管理的解决方案,它能够从 json,toml,ini,yaml,hcl,env 等多种格式文件中,读取配置内容,它还能从一些远程配置中心读取配置文件,如consul,etcd等;它还能够监听文件的内容变化 读取 json,toml,ini,yaml,hcl,env 等格式的文件内容 读取远程配置文件,如 consul,etcd 等和监控配置文件变化 读取命令行 flag 的值 从 buffer 中读取值 viper 读取配置文件的优先顺序,从高到低,如下: 显式设置的Set函数 命令行参数 环境变量 配置文件 远程k-v 存储系统,如consul,etcd等 默认值 Viper 配置key是不区分大小写的 Famous parsing library toml :https://github.com/BurntSushi/toml json : https://github.com/json-iterato...
整合热加载
整合热加载热加载 和 热部署 热加载:代码进行修改时,程序能重新加载(部分代码),减少手动编译 热部署:代码修改时,程序能重新加载(整个应用或容器),热部署比热加载更为强大 Go实现热加载工具库Air 彩色日志输出 自定义构建或二进制命令 支持忽略子目录 启动后支持监听新目录 更好的构建过程 Get Air go get -u github.com/cosmtrek/air How to use Air 进入到项目目录 生成.air.conf文件: 首先在当前目录下查找 .air.conf配置文件,如果找不到就使用默认的air -c .air.conf air_emxaple.conf:12345678910111213141516171819202122232425262728293031323334353637383940414243444546# [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件# 工作目录# 使用 . 或绝对路径,请注意 `tmp_dir` 目录必须在 `root` 目录下root...
整合Swagger
整合SwaggerWhat is Swagger Swagger 是 描述使用JSON表示的RESTful API 接口文档描述语言,实现了自动文档,代码生成和测试用例功能 Get Swagger(Gin) go get -u github.com/swaggo/swag/cmd/swag import("github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger") Prepare Swagger 在根目录执行swag init 生doc文件 在main写入项目介绍 1234567891011121314// @title Tets Swaggper项目接口文档// @version 1.0// @description Go web Swagger// @termsOfService http: //swagger.io/terms/// @contact.name Piwriw// @contact.url http://www.swagger....
自定义业务状态码
自定义业务状态码业务状态码和HTTP状态码 业务状态码:在 REST 接口设计规范中,我们通常都会被引导为这里的 Code 应该是 HTTP 协议状态码 200,404 或者 501 等 HTTP状态码:HTTP 请求状态码是 HTTP 协议的一部分,用于表明 HTTP 响应状态 How to prepare code1. Code业务状态码封装123456789101112131415161718192021222324252627package controllertype ResCode int64const ( CodeSuccess ResCode=1000+iota CodeInvalidParam CodeUserExist CodeUserNotExist CodeInvalidPassword CodeServeBusy)var codeMsgMap=map[ResCode]string{ CodeSuccess: "success", CodeInvalidParam:"请求参数错误", CodeUserEx...
整合JWT
整合JWTWhat is JWT JWT 是 JSON Web Token 的缩写,是为了在⽹络应⽤环境间传递声明⽽执⾏的⼀种基于JSON的开放标准((RFC 7519)。JWT 本身没有定义任何技术实现,它只是定义了⼀种基于 Token 的会话管理的规则,涵盖 Token 需要包含的标准内容和 Token 的⽣成过程,特别适⽤于分布式站点的单点登录(SSO)场景 一段JWT Token 由”.”切割成头部、负载、签名三部分 JWT优缺点 JWT 拥有基于 Token 的会话管理⽅式所拥有的⼀切优势,不依赖 Cookie,使得其可以防⽌ CSRF 攻击,也能在禁⽤ Cookie 的浏览器环境中正常运⾏。 ⽽ JWT 的最⼤优势是服务端不再需要存储 Session,使得服务端认证鉴权业务可以⽅便扩展,避免存储Session 所需要引⼊的 Redis 等组件,降低了系统架构复杂度。但这也是 JWT 最⼤的劣势,由于有效期存储在 Token 中,JWT Token ⼀旦签发,就会在有效期内⼀直可⽤,⽆法在服务端废⽌,当⽤户进⾏登出操作,只能依赖客户端删除掉本地存储的 JWT Tok...
整合validation库
整合validation库Background 利用validation库进行对参数校验,减少业务逻辑的手动校验 Get validation go get github.com/go-playground/validator/v10 validation 配置项目 逗号( ,):把多个验证标记隔开。注意:隔开逗号之间不能有空格, validate:”lt=0,gt=100”,逗号那里不能有空格,否则panic 横线( - ):跳过该字段不验证 竖线( | ):使用多个验证标记,但是只需满足其中一个即可 Tag Description Example required 必填 Field或Struct validate:"required" omitempty 空时忽略 And more len 长度 Field validate:”len=0” eq 等于 Field validate:”eq=0” gt 大于 Field validate:”gt=0” gte 大于等于 ...
整合zap日志
数据库(MySql)篇连接数据库123456789101112131415161718192021 db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/DB_TEST") // 测试连接 db.Ping() // 使用 defer 释放连接 defer db.Close()``` ## insert 插入数据```java db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") } _, err := db.Query("INSERT INTO user VALUES(1, 'test')") if err != nil ...
整合zap日志
整合zap日志To Get zapgo get go.uber.org/zap Fast Use全局loggger123logger, _ := zap.NewProduction()defer logger.Sync() // 将 buffer 中的日志写到文件中logger.Info("this is a test log") Zap.S 和 Zap.Lzap.SugarLogger zap 默认的 logger 不支持格式化输出,要打印指定值要用 zap.String、zap.Int 等封装 SugaredLogger提供了debug、info、warn、error、panic、dpanic、fatal这几种方法(使用fmt.Sprint的默认格式),另外还有带f的支持format,带w的方法则支持with键值对 使用zap.SugarLogger sugar.Info("this will not be logged") sugar.DPanic("test dpanic") …… SugaredLogger...
Kubeedge-边缘计算
why I write the series of kubeedge It base on an experience I had studying kubeege. What is more,I chose it as my graduation project.(ps: somethings from Kubeedge 云原生边缘计算公开课) When I stumbled upon this series of courses. Now let get it! Backgroud of Edge calculation Famous words:” The future is here and it is built on cloud native “ (未来就在这里,它建立在云原生之上) Edge Computing will be 4x larger than cloud and will generate 75% of data worldwide by 2025. With hardware andsoftware spread across hundreds o...