Go 包/中间件
casbin
权限管理。
简介
权限管理在几乎每个系统中都是必备的模块。如果项目开发每次都要实现一次权限管理,无疑会浪费开发时间,增加开发成本。因此,casbin库出现了。casbin是一个强大、高效的访问控制库。支持常用的多种访问控制模型,如ACL/RBAC/ABAC等。可以实现灵活的访问权限控制。同时,casbin支持多种编程语言,Go/Java/Node/PHP/Python/.NET/Rust。我们只需要一次学习,多处运用。
结构
权限实际上就是控制谁能对什么资源进行什么操作。casbin 将访问控制模型抽象到一个基于 PERM(Policy,Effect,Request,Matchers) 元模型的配置文件(模型文件)中。因此切换或更新授权机制只需要简单地修改配置文件。
policy 是策略或者说是规则的定义。它定义了具体的规则。
effect 根据对请求运用匹配器得出的所有结果进行汇总,来决定该请求是允许还是拒绝。
request 是对访问请求的抽象,它与 e.Enforce() 函数的参数是一一对应的
matcher 匹配器会将请求与定义的每个 policy 一一匹配,生成多个匹配结果。
BoltDB
嵌入式kv数据库
简介
BoltDB设计源于LMDB,具有以下特点:
- 直接使用API存取数据,没有查询语句;
- 支持完全可序列化的ACID事务,这个特性比LevelDB强;
- 数据保存在内存映射的文件里。没有wal、线程压缩和垃圾回收;
- 通过COW技术,可实现无锁的读写并发,但是无法实现无锁的写写并发,这就注定了读性能超高,但写性能一般,适合与读多写少的场景。
GORM
go-orm 数据库关系映射管理工具
- gorm 更新数据,当用结构体更新的时候,当结构体的值是””或者0,false 等该数据类型的零值时,就什么也不会更新。
- datatypes仓库负责收集各种自定义数据类型。
- gorm 支持 clause 来实现 Upsert 的功能,但是发现只支持根据 id 进行判断,如果对应 id 记录存在则更新,对应 id 记录不存在则插入。
gorm 实现 upsert
1 | // gorm 实现有则修改,无则新增 |
cron
定时任务
Golang 定时任务 github/robfig/cron/v3 使用与源码解析
flag
1 |
|
注意:注册之后,flag.Parse()
完成才能拿到参数具体值。且一定要用指针类型使用 flag 解析出来的值,不然就会是默认值,而获取不到命令参数传递的值。
golang 每日一库
每日一库会甄选 go 语言中好用实用的库做推荐,内容中会讲解其目标领域和使用方法,有很多新颖且使用的封装库都可以在这里找到,在知乎、微信公众号、github均有维护,虽然目前更新频率已经不再保持,但是仍有许多值得了解的推荐。