Help us shape the future of Go! Take the 2026 Go Developer Survey

pkg

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2026 License: MIT

README

pkg

微工具集 18 合 1——errors/validator/stringx/convert/timex/uidgen/cache/bufiox/strmap 等基础工具包

🌐 项目主页:https://oekit.github.io/ · 名称由来:Open Easy Kit(开源 · 易用 · 工具集合) 🤖 AI Agent:本仓规范与硬规则见 AGENTS.md;机器可读索引见 llms.txt(接口签名以源码为准)。

安装

go get github.com/oekit/pkg@v0.2.0

这个仓库做什么

pkg 是 oekit 的基础工具集:18 个经过生产验证的小工具包合成一个 module, 覆盖错误处理、参数校验、字符串/切片/类型转换、时间与 cron、ID 生成、JSON 修复、 HTTP JSON 调用、分页、glob 匹配、进程内缓存、零拷贝缓冲 IO、GC 友好只读字典 等日常高频需求。

设计原则:

  • 按包编译:import 哪个子包用哪个,go.mod 只多一条 require,二进制零冗余
  • 零依赖或近零依赖:绝大多数子包只依赖标准库;重依赖(validator/v10)隔离在对应子包
  • 生产验证:全部代码源自 enjoydream 后端服务多年共用积累,带完整单元测试(19/19 包)

包清单

包 做什么
errors 错误链 Wrap/Cause(nil-safe)、BizError(业务码/HTTP 码双轨)、sentinel 错误。整个矩阵的错误处理基座
validator go-playground/validator 封装,ValidationError 自动映射 400
stringx ID 生成、关键词包含匹配、缩进、英文复数化、{key} 模板替换
slicex Partition 二分组(保序)、GroupBy 等切片操作
enumx 枚举:确定性顺序的 All/Values/解析(map 遍历乱序问题的解法)
convert 字符串/数字/布尔/切片的宽容转换(脏输入友好)
encoding JSON/msgpack 等序列化助手
jsonrepair LLM 输出等脏 JSON 的宽容修复链(截断/尾逗号/单引号),修复永不失败——异常时回退原文
httpjson 带 JSON 解析的 HTTP 调用助手
mathx 安全随机、平均值等统计助手
pathx glob 路径匹配(vendor/**、*.test)
pagination PageRequest/PageResponse 分页换算
ptrx 指针 To/From 与安全解引用
timex(+cron) 时间格式化/解析/时间戳 + cron 表达式
uidgen UUID/雪花/随机串 ID 生成
cache 刷新检查器:TTL 后台刷新、失败按 failTTL 降级、并发请求合并为一次刷新
bufiox 面向协议编解码的零拷贝缓冲 IO:读侧 Next/Peek 返回缓冲视图,写侧 Malloc/WriteBinary 攒批一次 Flush(bytes 与 io.Reader/Writer 双实现)
strmap GC 友好的只读字符串 map:键打包 + int32 哈希表 + maphash,海量静态映射(header/字典表)零 GC 扫描开销

快速使用

import (
    "github.com/oekit/pkg/errors"
    "github.com/oekit/pkg/jsonrepair"
    "github.com/oekit/pkg/stringx"
)

// 错误链:nil-safe 包装 + kv 关联字段,Is/As 语义保持
err := errors.Wrap(io.ErrUnexpectedEOF, "read config", "path", "/etc/app.yaml")

// 脏 JSON 修复(LLM 场景)
fixed := jsonrepair.Repair(`{"name": "oekit",) `)

fmt.Println(stringx.Pluralize(3, "module")) // 3 modules
import (
    "github.com/oekit/pkg/bufiox"
    "github.com/oekit/pkg/strmap"
)

// 零拷贝解析:Peek 定长头 → Next 出负载视图,全程无字段级拷贝
r := bufiox.NewDefaultReader(conn)
hdr, _ := r.Peek(4)                  // 零拷贝视图
_ = r.Skip(4)
payload, _ := r.Next(int(binary.BigEndian.Uint32(hdr)))
defer r.Release(nil)                 // Release 后视图失效

// GC 友好只读字典:构建后只读,Get 无 map 开销
var canon = strmap.NewStr2StrFromMap(map[string]string{
    "content-type": "Content-Type",
})
name, ok := canon.Get("content-type") // "Content-Type", true

边界

  • 需要并发原语(safe-go/重试/限流)→ concurrency
  • 需要日志 → logx;需要数据库 → gorm
  • 本仓不依赖矩阵内任何其他模块(validator→errors、httpjson→stringx 两条内部边除外)

矩阵总览(23 活跃模块,自动生成)

模块 内容 矩阵内依赖
pkg 微工具集 18 合 1(errors/validator/stringx/slicex/enumx/convert/encoding/jsonrepair/httpjson/mathx/pathx/pagination/ptrx/timex/uidgen/cache/bufiox/strmap) —
concurrency 并发与流控原语(async/gopool/group/singleflight/progress/syncx/ratelimit/retry) —
logx 统一日志门面(多后端可替换 + Sink + caller 归属)+ 优雅关停 —
core 应用基建件(governance 治理 schema / config 配置加载 / lifecycle 契约 / network IP 工具 / version) logx
istio Istio Proxyless——Kitex xDS 动态熔断 —
metrics Prometheus 门面 + 弹性指标族 core
tracing OpenTelemetry 追踪 + trace_id 真相源 logx
registry 注册发现核心 + Nacos 实现 + Nacos 配置源 + sdbridge core、logx
data 缓存检查器(TTL/failTTL/inflight 合并)+ LocalCache concurrency、logx
gorm SQL/GORM 全家——连接池增强、框架无关 CRUD Service、仓储 logx、pkg
redis Redis 全家——客户端封装、缓存后端、分布式锁 concurrency、data、logx
httpx HTTP 客户端 + 负载均衡——服务发现/熔断/重试/指标/OTel 透传 concurrency、core、logx、metrics、registry、tracing
network 轻量网络客户端——WebSocket/NATS/MQ 抽象、连接与流工具、Octopus 推送 concurrency、logx、tracing
timertask 分片定时任务(FNV-1a、心跳续约) concurrency、logx
middleware Hertz 自研标准中间件栈 + contrib 桥接 + hmw concurrency、core、logx、metrics、pkg、registry、tracing
nns NNS 服务治理客户端——provider 无关发现/配置/实例缓存 concurrency、core、logx、registry
nns-endpoint NNS 端点工厂——per-service 熔断、换实例重试、gRPC 池 concurrency、core、httpx、logx、metrics、nns、registry
bootstrap 应用生命周期引导——bootstrap.Run 骨架 + healthz concurrency、logx
handler HTTP handler 层——通用 CRUD Handler、参数绑定、版本端点 concurrency、core、gorm、logx、metrics、middleware、pkg、registry、tracing
hertz Hertz 运行时集成——日志桥接、生命周期、SSE/health/metrics、适配器、OTel bootstrap、concurrency、core、logx、metrics、nns、registry、tracing
kitex Kitex 生态——日志桥接、治理热更、生命周期、BizError 桥接、kitexotel bootstrap、concurrency、core、logx、metrics、nns、pkg、registry
workflow 组合式流程编排——串行/并行/异步/条件分支 + Hook AOP concurrency、logx
kitex-examples Kitex echo 示例——client/server + IDL + 治理配置 bootstrap、concurrency、core、kitex、logx、metrics、nns、pkg、registry、tracing

依赖严格自底向上;微库已合并为 pkg,旧微库仓已删除。

本仓在矩阵中的位置与依赖见上表「矩阵内依赖」列。历史沿革:源自 ekit 单体库 (git.enjoye.top/enjoydream/ekit v0.34.0,冻结维护),2026-10 拆分为独立 module。

License

MIT — 见 LICENSE

Directories

Path Synopsis
Package bufiox 面向协议编解码的缓冲 IO:读侧 Next/Peek/Skip 返回内部缓冲的 零拷贝视图(省去逐字段拷贝),写侧 Malloc/WriteBinary 攒批后一次 Flush (零拷贝引用调用方切片)。
Package bufiox 面向协议编解码的缓冲 IO:读侧 Next/Peek/Skip 返回内部缓冲的 零拷贝视图(省去逐字段拷贝),写侧 Malloc/WriteBinary 攒批后一次 Flush (零拷贝引用调用方切片)。
Package cache 进程内检查缓存原语(stdlib-only):TTL 缓存 + 刷新进行中 并发合并(inflight singleflight)+ 失败短 TTL。
Package cache 进程内检查缓存原语(stdlib-only):TTL 缓存 + 刷新进行中 并发合并(inflight singleflight)+ 失败短 TTL。
Package convert 提供常用类型转换工具函数。
Package convert 提供常用类型转换工具函数。
Package encoding 提供常用的编码和哈希工具函数。
Package encoding 提供常用的编码和哈希工具函数。
Package enumx 提供枚举管理能力。
Package enumx 提供枚举管理能力。
Package errors 提供线程安全的多错误聚合。
Package errors 提供线程安全的多错误聚合。
Package httpjson stdlib-only 的 HTTP+JSON 调用纪律单源:ctx 感知构造请求 → 执行 → 限容读体(读错误不吞)→ 状态码检查(错误体 rune 安全截断,不腰斩 UTF-8)→ JSON 解码,外加可选的指数退避重试与服务端 Retry-After 建议捕获。
Package httpjson stdlib-only 的 HTTP+JSON 调用纪律单源:ctx 感知构造请求 → 执行 → 限容读体(读错误不吞)→ 状态码检查(错误体 rune 安全截断,不腰斩 UTF-8)→ JSON 解码,外加可选的指数退避重试与服务端 Retry-After 建议捕获。
Package jsonrepair LLM 输出宽容 JSON 修复骨架:栅栏剥离 → 散文抽对象 → 语法级修复 → 标量归一。
Package jsonrepair LLM 输出宽容 JSON 修复骨架:栅栏剥离 → 散文抽对象 → 语法级修复 → 标量归一。
Package mathx 提供常用的数学工具函数。
Package mathx 提供常用的数学工具函数。
Package pagination 提供框架无关的分页参数定义。
Package pagination 提供框架无关的分页参数定义。
Package pathx 提供文件路径匹配工具。
Package pathx 提供文件路径匹配工具。
Package ptrx 提供指针相关的泛型工具函数。
Package ptrx 提供指针相关的泛型工具函数。
Package slicex 提供泛型 Slice 工具函数。
Package slicex 提供泛型 Slice 工具函数。
Package stringx 提供常用的字符串操作工具函数。
Package stringx 提供常用的字符串操作工具函数。
Package strmap GC 友好的只读字符串 map:键打包进单一 []byte、int32 开放寻址 哈希表,配合 maphash 种子哈希,避免为海量静态映射(如 header/路由/字典表) 长期持有海量小字符串对象带来的 GC 扫描开销。
Package strmap GC 友好的只读字符串 map:键打包进单一 []byte、int32 开放寻址 哈希表,配合 maphash 种子哈希,避免为海量静态映射(如 header/路由/字典表) 长期持有海量小字符串对象带来的 GC 扫描开销。
Package timex 提供常用的时间操作工具函数。
Package timex 提供常用的时间操作工具函数。
cron
Package cron 提供 Cron 表达式解析和调度功能。
Package cron 提供 Cron 表达式解析和调度功能。
Package uidgen 提供分布式唯一 ID 生成器.
Package uidgen 提供分布式唯一 ID 生成器.
Package validator 提供统一的参数验证能力。
Package validator 提供统一的参数验证能力。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL