1 Star 1 Fork 1

xiaoyutab/xgotool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
with.go 1.93 KB
一键复制 编辑 原始数据 按行查看 历史
package xginplus
import (
"time"
"github.com/gin-gonic/gin"
)
type OptionFunc func(c *Config)
type ContextOptionFunc func(c *Context)
// 设置全接口启用/禁用抖动过滤
// 网络抖动的含义为同一秒内重复的请求
// 此处的抖动过滤的方案为:
// 1. 设置第一个请求的请求锁
// 2. 等待第一个请求的结果(若此期间进来第二个请求,第二个请求将会等待)
// 3. 第一个请求结果出来后,返回结果,并将结果进行缓存
// 4. 第n个请求进来后,直接读取缓存并返回
//
// jit 是否启用抖动过滤
func WithJitter(jit bool) OptionFunc {
return func(c *Config) {
c.Jitter = jit
}
}
// 一般成功数据处理结构
//
// f 一般成功的处理函数
func WithSuccessData(f func(c any) (int, any)) OptionFunc {
return func(c *Config) {
c.SuccessData = f
}
}
// 分页成功数据处理结构
//
// f 一般成功的处理函数
func WithSuccessPage(f func(count int64, c any, ext gin.H) (int, any)) OptionFunc {
return func(c *Config) {
c.SuccessPage = f
}
}
// 错误数据格式化
//
// f 处理错误数据的函数信息
func WithErrorData(f func(err error) (int, any)) OptionFunc {
return func(c *Config) {
_default.ErrorData = f
}
}
// 设置当前接口启用/禁用抖动过滤
//
// jit 是否启用抖动过滤
func WithContextJitter(jit bool) ContextOptionFunc {
return func(c *Context) {
c.Jitter = jit
}
}
// 设置缓存时间(默认缓存1秒)
// 此设置值会影响网络抖动的时间间隔
// 原始配置:1s内同样的结果只处理一次
// 修改时长后,会变成 指定时长内同样的请求结果只会处理一次
// PS: 此处的缓存命中方式涉及到:请求方式、请求路径、客户端IP、客户端UA、客户端ContentType、客户端发送的POST原始参数
//
// ts 指定时长
func WithContextJitterTime(ts time.Duration) ContextOptionFunc {
return func(c *Context) {
c.JitterTime = ts
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/xiaoyutab/xgotool.git
git@gitee.com:xiaoyutab/xgotool.git
xiaoyutab
xgotool
xgotool
v0.3.32

搜索帮助