你用 Go 写过中间件吗?带你用 Go 实现【操作日志中间件】
需求说明
管理后台所有修改,添加,删除的操作都要记录
操作日志的统计不影响主程序的性能
需求分析
把相关代码封装成中间件,独立使用
合理使用 goroutine,不影响主线程的性能
文档说明
基于 golang 语言开发
基于 gin 网络框架开发
基于 MySQL5.8 开发
把操作日志部分封装成中间件,在 rourter 文件中引用
非核心代码已省略,用 3 个竖着排列的点号.表示
数据库表结构设置
操作日志表
代码
中间件代码
代码分析
我们可以通过 context 直接获得请求方式和请求的 url
无法直接获得返回信息,我们可以借助"ResponseWriter",运用拦截器的思想,把返回信息先截取到,再向下继续传递
像获得客户端 ip 这类方法封装到 util 中,方便灵活调用
我们无法将 adminLogs()方法整体设置为 goroutine,因为这样会将 context 的事件传递在新的协程中进行,无法正常传递。
所以我们再 c.Next()事件传递之后,把 json 解析成结构体,以及保存操作日志到数据库的操作设置为使用 goroutine 协程操作
操作日志是没有比较记录查询操作的,所以我们把请求方式为 GET 的过滤掉
复制代码
model 层代码
复制代码
路由代码
复制代码
总结
以上则是我的实现思路
还有另外一种思路,计划已消息队列的方式实现,发送通知进行日志的报错
相关文章
GO 部分打算做成一个系列,最终把封装好的代码开源出来
一起学习,升级打怪
我们搞了一个对学 Go 真正有帮助的群,欢迎加入:
公众号:程序员升级打怪之旅
微信号:wangzhongyang1993
版权声明: 本文为 InfoQ 作者【王中阳Go】的原创文章。
原文链接:【http://xie.infoq.cn/article/308e5148bdd64444df1f1df5a】。文章转载请联系作者。
评论 (1 条评论)