这个包含的工具基本覆盖了web服务器开发各个部分,可以方便用户快速开发, 使用户的精力集中于业务而不再为代码细节分心
每个包实现的功能都较为单一,包之间依赖较少, 减少用户的负担,避免用户想使用某一个包的时候发现还得引入另一个包, 断开包之间的依赖也带来了代码冗余的问题, 有些基本包的依赖难以断开,不过这些基本包暴露了一些可供用户自定义的部分, 尽量通用化
写该工具包的原因是遇到如下问题:
主要问题:接口层写来写去都一样,重复劳作好没意思!
- 接口之间好多共同参数,app类接口需要User-Id等Header参数,admin类接口需要username等Query参数
- 每个接口都要定义请求Query、Body、Header、Uri参数,又要定义响应参数,太多结构了!
- 不同接口可能有相同的参数,如何优雅共享结构?
- 不同接口可能有相同的权限限制,例如app接口必须传用户信息,vb还得用户绑定!
- 接口层解析的参数又要传给业务层,参数声明又写一遍!
- 用bind.Wrap后你就不用再写接口层了!
- gin.Group控制一组接口的权限、解析共同类型的参数
- 每条sql语句执行耗时是怎样?
- 怎样优雅地让xray跟踪每条sql执行情况
- 有些拓传数据我想存成json,但每次写入前调用json.Marshal, 取出后调用json.Unmarshal好麻烦啊!这种重复劳作如何解决?
- 读写分离,aws rds提供了数据库主从库,但得自己代码里区分哪些用主库,哪些用从库
- 数据库存储时间类型是date,与客户端打交道的时间类型是timestamp(int),转来转去真麻烦
能直接存取json结构就好了,这样我就不用关心json解析了
- 写来写去又是一样!
- 这个接口不是GET又不是POST要我怎么调?
- 有的接口返回的是ret/msg,有的是code/result,怎么写个统一的rpc函数?
- 这个函数有服务器错误,又有客户端错误怎么办
- 客户端错误得返回400,服务端错误得返回500,服务端错误太多得报警
- 错误码怎么知道冲突没有?
- 如何灵活增加我自己的错误码?
如何快速排查问题,有些问题不好重现
日志这么多,咋看哪些日志属于同一次请求?
- 返回400 verify body params failed,是我body参数哪里错了?服务器同学查下日志吧!
- 接口调不通,是客户端参数逻辑问题?还是服务器问题?用了docker不好用tcpdump!
- 测试同学你重现一下bug吧?不好重现怎么办?
- 怎样优雅使用xray监控每个函数的耗时、函数是否发生错误
- 每个函数都用defer recover保护,将panic转成err,怎样写最简单
- 我想在consul上配个缓存时间为5分钟,得先转成time.Duration类型的300000000000纳秒,不能像nginx一样配个"5m"吗?
go.mod中用replace
require zlutils v0.0.0
replace zlutils v0.0.0 => github.com/lun-zhang/zlutils/v7 v7 //go build时会找到v7最新版本
代码中这样导入:import "zlutils/time"
,这样做的好处是:
- 避免同时引入本项目的不同版本,导致类型/变量值不匹配
坏处是: