Skip to content

mzzsfy/go-util

Repository files navigation

go的一些工具类,大量运用了泛型,最低要求 golang 1.18

项目遵守:

  • 不引入任何第三方库
  • 全力使用泛型
  • 尽量优化性能
  • 提供优雅可读的函数签名

本项目可能会有破坏性的修改函数签名行为,不要轻易升级

简单说明

  • seq
    一个高性能的golang的泛型链式调用库,实现了类似java stream逻辑,不依赖chan和goroutine,支持任意类型的链式调用,支持并行化( 可限制并行数量),排序等

    // 从19开始,每次减3,直到-10,额外添加100,10,0,1,过滤出偶数,再丢弃前5个,从小到大排序,打印到控制台
    FromIntSeq(19, -10, -3).Add(-100,100,10,0,1).Filter(func(i int) bool {
        return i%2 == 0
    }).Drop(5).Order(LessT[int]).ForEach(func(i int) {
        fmt.t.Log(i)
    })
    // a 1 b 2 c 3
    // "a,b,c"
    BiFromMap(map[string]int{"a": 1, "b": 2, "c": 3}).OnEach(func(k string, v int) {
        print(k, v)
    }).KSeq().JoinString(func(s string){retrun s}, ",")

    更多例子见: seq_test.go biSeq_test.go
    如果使用seq处理大interface{},可能会导致编译速度下降,编译缓存磁盘占用大

    参考来源: https://mp.weixin.qq.com/s/v-HMKBWxtz1iakxFL09PDw

  • config
    工作模式类似spring配置工具类

  • unsafe
    获取goroutine id,hash等不安全操作

  • concurrent
    一些并发相关的工具,包含可重入锁等

  • pool
    一些池化工具:携程池,对象池

  • queue
    简单的队列

  • storage
    map等存储工具,swissMap,gls等

  • logger
    日志工具

  • helper
    一些工具,如: 字符串处理,时间日期处理,cron任务,延时任务 等