module
Version:
v1.4.0
Opens a new window with list of versions in this module.
Published: May 6, 2026
License: Apache-2.0
Opens a new window with license information.
README
¶
golib
一些通用的go lib 封装
| 模块 |
包 |
描述 |
| 日志 |
log |
提供终端输出、文件输出的日志,日志分level等级、tags来控制输出 |
| 双向环形链表 |
ringbuffer |
|
| 无限缓存chan |
zchan |
一个使用双向环形链表,能无限缓存的chan通道 |
| 并发安全Set集合 |
set |
一个基于sync.Map封装的线程安全Set集合 |
| 并发安全Map |
zmap |
一个并发安全的Map,适用于高频读极少写,keys小于1000的map |
| 并发安全切片 |
zslice |
封装一个并发安全的Slice,未使用分段锁, 10k量级,超出性能急降 |
| 字符串与数字转换 |
str |
一些字符串与数字转换方法 |
| 加密算法封装 |
crypt |
集成md5、hmac Hash算法,aes、des对称加密,rsa非对称加密 |
安装
go get -u github.com/zngw/golib
使用
日志
使用案例参考 https://github.com/zngw/golib/blob/main/examples/log.go
双向环形链表
- 双向环形链表buf其结构类似于一个手串,手串上的珠子就可以当做是一个节点,每个节点可以是一个固定大小的数组
- 双向环形链表buf上分别有两个读写指针readCell和writeCell,指向将要进行读写操作的cell,负责进行数据读写
- readCell永远追赶writeCell,当追上时,代表写满了,进行扩容操作
- 扩容操作即在写指针的后面插入一个新建的空闲cell
- 缩容操作修改链表指向即可,让buf恢复原样,仅保持两个cell即可,其他cell由于不再被引用,会被GC自动回收
- 在链表写入(Write)和读取(Read)时用原子操作修改链表有效数据长度count
使用案例参考 https://github.com/zngw/golib/blob/main/examples/ringbuffer.go
无限缓存channel
使用案例参考 https://github.com/zngw/golib/blob/main/examples/zchan.go
线程安全Set集合
使用案例参考 https://github.com/zngw/golib/blob/main/examples/set.go
并发安全Map
- 一个并发安全的Map,使用 sync.RWMutex + 普通 map 实现
- 适用于高频读极少写,keys小于1000的map,读性能比sync.Map快2~5倍
- 提供类似于sync.Map的Load, Store, Delete, LoadOrStore,Len, Range, ListKeys等方法
使用案例参考 https://github.com/zngw/golib/blob/main/examples/zmap.go
并发安全切片
- 封装一个可线程安全的Slice
- 提供常见操作方法,如 Append, Get, Set, Len, Delete, Range, Clear, Sort, Find等
- 未使用分段锁,如果 slice 很大会影响效率
- 部分实测数据参考(8核8GB云服环境测试):
-
- 小于1k元素,100并发写,几乎无影响;
-
- 10k元素左右时,100并发写,QPS ≈ 5k~10k
-
- 100k元素,100并发写, QPS 骤降至 500~1k(因扩容+锁竞争),不建议使用
使用案例参考 https://github.com/zngw/golib/blob/main/examples/zslice.go
加密算法封装
Directories
¶
|
|
|
@Title @Description $ @Author 55 @Date 2022/5/30
|
@Title @Description $ @Author 55 @Date 2022/5/30 |
|
|
|
Package ringbuffer @Description $ 双向环形链表 @Author 55 @Date 2022/5/30
|
Package ringbuffer @Description $ 双向环形链表 @Author 55 @Date 2022/5/30 |
Package set @Description 基于sync.Map封装的线程安全Set集合 @Author 55 @Date 2022/5/30
|
Package set @Description 基于sync.Map封装的线程安全Set集合 @Author 55 @Date 2022/5/30 |
Package str @Description 一些字符串与数字转换方法 @Author 55 @Date 2022/5/30
|
Package str @Description 一些字符串与数字转换方法 @Author 55 @Date 2022/5/30 |
Package zchan @Description 无限缓存channel @Author 55 @Date 2022/5/30
|
Package zchan @Description 无限缓存channel @Author 55 @Date 2022/5/30 |
Package zmap @Description 封装sync.Map, 添加一个源子计数,容易获取map数量 @Author 55 @Date 2025/12/2
|
Package zmap @Description 封装sync.Map, 添加一个源子计数,容易获取map数量 @Author 55 @Date 2025/12/2 |
Package zslice @Description 封装一个可线程安全的Slice 提供常见操作方法,如 Append, Get, Set, Len, Delete, Range 等 未使用分段锁,如果 slice 很大会影响效率 部分实测数据参考(8核8GB云服环境测试):
|
Package zslice @Description 封装一个可线程安全的Slice 提供常见操作方法,如 Append, Get, Set, Len, Delete, Range 等 未使用分段锁,如果 slice 很大会影响效率 部分实测数据参考(8核8GB云服环境测试): |
Click to show internal directories.
Click to hide internal directories.