Skip to content

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

FilesCodeBox kit

CI Release License Go

FilesCodeBox 生态的共享 Go 工具库:28 个零生态依赖的通用包(重试、并发编排、限流、优雅停机、工作流等),供 core / server / fnos / p2p 及任意 Go 项目复用。

Shared Go toolkit for the FilesCodeBox ecosystem — 28 general-purpose packages with zero ecosystem dependencies.

设计原则

  • 零生态依赖(叶子仓):不 import 任何 github.com/filescodebox/* 兄弟模块,CI 强制守卫;被任何模块依赖都不会成环。
  • stdlib 优先:绝大多数包纯标准库实现;仅 3 个包带轻量外部依赖(ratelimit → golang.org/x/time,uidgen → google/uuid,validator → go-playground/validator)。
  • 带测试发布:全部包附 -race 通过的单元测试;lint 棘轮从 0 issues 起步只收紧不放宽。

包总览

并发与重试

包 说明
async 安全 goroutine 启动工具(GoSafe 等 panic 恢复原语,进程兜底层)
group Actor 组:多长驻 goroutine 并发执行,任一返回即中断其余
singleflight 并发请求合并(防击穿):同 key 并发调用只执行一次、共享结果
syncx 并发编排原语:按键在飞闸门 + 按序扇出收集
retry 可取消的重试与轮询:带退避的动作重试 + 到 deadline 的条件轮询
ratelimit 通用限流器(令牌桶 + 按键限流管理器,空闲键自动回收)
cache 进程内检查缓存:TTL 缓存 + 刷新进行中合一
progress 多阶段工作流进度追踪(有序阶段生命周期 + 总进度)

错误与校验

包 说明
errors 线程安全的多错误聚合
validator 统一参数验证(go-playground/validator 封装)
enumx 枚举管理

网络与数据

包 说明
httpjson HTTP+JSON 调用纪律单源:ctx 感知构造请求、重试与 Retry-After 尊重
jsonrepair LLM 输出宽容 JSON 修复:栅栏剥离 → 散文抽对象 → 逐层修复
encoding 编码与哈希工具
pagination 框架无关的分页参数定义
uidgen 分布式唯一 ID / 随机串生成

基础类型工具

包 说明
convert 常用类型转换
slicex 泛型 Slice 工具
stringx 字符串操作(截断等)
mathx 数学工具(统计等)
timex 时间操作 + cron 子包
pathx 文件路径匹配
ptrx 指针泛型工具

构建信息

包 说明
version 编译时版本注入(-ldflags)+ 运行时查询(Metadata())

服务治理与网络

包 说明
shutdown 优雅停机管理器:信号接入 + 引用计数请求阻断 + 资源逆序释放(日志走 stdlib slog)
workflow 流程编排:Pipe 串行 / Parallel 并行 / Async+Future / Switch 条件分支,可任意嵌套,Hook AOP 递归传播
streamx 跨协议流式事件抽象(Event/Source/Sink/Hub):一次写 Event,SSE/WS/Chunked 多协议扇出,零框架依赖
wsutil WebSocket 房间广播器:Conn 接口解耦不绑具体 ws 库,空房间自动清理、容错广播

日志约定:以上包的运行日志统一走 stdlib log/slog(slog.Default()),消费方可用自定义 handler 接管输出格式。

快速开始

go get github.com/filescodebox/kit/retry@latest
// 带退避的重试
err := retry.Do(ctx, retry.Config{Attempts: 3, Delay: 100 * time.Millisecond},
    func(attempt int) error { return doSomething() })

// 按键在飞闸门:同 key 并发上限(如按分片 ID 限在飞)
gate := syncx.NewKeyedGate(8) // cap<=0 = 不限
release, err := gate.Acquire(ctx, "chunk-42")
if err != nil { /* ctx 取消/排队失败 */ }
defer release()

各包自带 doc 注释与 _test.go 用例,行为以测试为准。

本仓库在生态中的位置

server / fnos / frontend ──► core ──► contracts ──► thrift runtime
p2p(叶子仓)────────────────► kit(本仓,零生态依赖地基层;core 亦按需消费)

纯库仓:无二进制、无镜像、无 chart;以 git tag(v*)发布,go get 直接消费。

License

Apache-2.0。其中通用工具包移植自 enjoydream/ekit(MIT License, Copyright (c) 2024-2026 enjoydream),归属声明见 NOTICE。

About

FilesCodeBox 生态共享 Go 工具库:retry/syncx/ratelimit/errors 等 20 个通用包,零生态依赖 / Shared Go toolkit for the FilesCodeBox ecosystem (zero ecosystem dependencies)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages