Skip to content

kubeservice-stack/common

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

241 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

golang common library

Go Reference Build Status Go Report Card Codacy Badge Github release codecov Apache-2.0 license Last Commit FOSSA Status Awesome Codacy Coverage Reporter

EN README

Common Library 是一个 Go 语言 编程工具包,用于构建微服务(或单体应用)。解决分布式系统应用程序架构中的常见问题,让业务更专注于交付业务价值

此工具包兼容主流服务框架:KiteServiceCombgo-kitCloudWeGo/Kitexginbeego

动机

Go 已成为主流服务器语言,在 Facebook、Uber、Netflix 以及字节跳动、滴滴等"现代企业"中广泛使用。但仍有大量企业基于 JVM 技术栈处理业务逻辑,这很大程度上得益于 JVM 成熟的微服务库生态系统

为了帮助 Go 开发者达到同样的工程效能,我们构建了这个全面的工具包。Golang Common Library是一组包(package)最佳实践,为任何规模的组织提供全面健壮可信赖的微服务开发支持。

目标

  • 各 package 相互独立,可按需引入
  • 减少外部版本依赖,自成生态
  • 无业务逻辑,完全开放基础能力
  • 不强制绑定特定工具或技术

快速开始

go get github.com/kubeservice-stack/common

依赖管理

基于 go mod,支持多 Go 版本编译,最低支持 Go 1.22

包概览

缓存 (pkg/cache)

内存缓存模块,支持多种淘汰算法和回调机制。

  • 淘汰算法: LRU(最近最少使用)、LFU(最不常用)、FIFO(先进先出)、ARC(自适应替换)、Simple(简单模式)
  • 回调事件: load 加载回调、淘汰回调、清除回调
  • 容量控制: 支持全局内存最大值限制和最大条目数限制
  • 指标统计: 支持命中率等 metrics 统计
  • 查询模式: 精确匹配(hash)和近似值匹配(多阶二分查找)
  • 无 GC 模式: 高性能无 GC 模式
cache := cache.NewLRUCache(&cache.Setting{...})
cache.Set("key", "value")
val, err := cache.Get("key")

配置管理 (pkg/config)

统一配置加载,支持 TOML 文件和环境变量。

  • 支持 TOML 格式配置文件
  • 支持环境变量自动覆盖(通过 env 标签)
  • 内置配置项:Logging、Metrics、Discovery、Gin、RateLimit、Temporary、Database
  • 支持配置默认值设置
config.GlobalCfg.Logging.Level = "debug"
config.LoadGlobalConfig("config.toml")

服务发现 (pkg/discovery)

基于 etcd 的服务注册与发现。

  • 服务注册与健康检查(心跳保活)
  • Leader 选举
  • Key-Value 存储(Get、List、Put、Delete、Batch)
  • Watch 监听(支持单个 key 和前缀匹配)
  • 事务支持
factory := discovery.NewDiscoveryFactory("my-service")
disc, _ := factory.CreateDiscovery(config.Discovery{...})
data, _ := disc.Get(ctx, "/services/my-app")

序列化编解码 (pkg/codec)

统一编解码接口,支持多种序列化格式。

  • MCPack: 类似 JSON 的二进制编解码格式
  • MsgPack: 基于 msgpack 协议的序列化
codec := codec.PluginInstance(codec.MSGPACK)
data, _ := codec.Marshal(obj)
codec.Unmarshal(data, &obj)

数据库 ORM (pkg/orm)

基于 GORM 的数据库连接管理,支持多种数据库和缓存。

  • 数据库驱动: MySQL、PostgreSQL、SQLite3
  • ORM 缓存: Redis 缓存、内存缓存
  • 缓存模式: 禁用缓存、仅主键缓存、仅查询缓存、全量缓存
  • 可追溯: 内置 OpenTelemetry tracing 插件
  • 缓存策略: 缓存穿透保护、异步写入、自定义 TTL
db, _ := orm.NewDBConn(config.DBConfig{
    DBType:   orm.MYSQL,
    Host:     "localhost",
    Port:     "3306",
    Database: "mydb",
})
defer db.Close()

错误码管理 (pkg/errno)

统一的错误码定义和管理。

  • 支持状态码 + 消息的标准化错误结构
  • 预定义常见错误码常量
err := errno.New(404, "resource not found")

日志模块 (pkg/logger)

基于 Uber Zap 的高性能日志。

  • 兼容标准库日志接口,支持 Debug/Info/Warn/Error 级别
  • 支持 JSON 和 Text 两种输出格式
  • 按模块和角色分类日志(HTTP、Crash 等)
  • 终端自动检测(彩色输出)
  • 基于 lumberjack 的日志轮转(按大小、按日期)
logger := logger.GetLogger("my-module", "my-role")
logger.Info("operation completed", logger.Int64("duration", 100))

指标采集 (pkg/metrics)

支持 Prometheus 和 OpenTelemetry 指标采集。

  • Prometheus HTTP 接口暴露指标
  • OpenTelemetry metrics 集成
  • 基于 tally 的内存统计
  • Stats 统计工具

连接池 (pkg/connpool)

通用连接对象池管理。

  • 最大活跃连接数限制
  • 空闲连接保留数控制
  • 空闲超时自动回收
  • 等待超时机制(支持永久等待、不等待)
  • 连接创建/销毁/清理回调
pool := connpool.NewConnectionPool(
    100, 10, 5*time.Minute, 30,
    connectFunc, disconnectFunc, clearFunc,
)
conn, _ := pool.Pop()
defer pool.Push(conn)

有向无环图 (pkg/dag)

DAG(有向无环图)数据结构。

  • 顶点管理(增删查)
  • 边管理(增删)
  • 获取汇点(Sink)、源点(Source)
  • 前驱/后继查询
  • 基于 OrderMap 的有序遍历

分布式锁 (pkg/lock)

轻量级锁接口。

  • 文件锁: 支持 Unix 和 Windows
  • 内存锁: 进程内互斥锁

限流器 (pkg/ratelimiter)

多维度限流。

  • 令牌桶算法: 支持 QPS 和 burst 控制
  • 动态调整: 支持运行时更新限流参数
  • 多对象限流: 可对不同 name 独立限流
limiter.TryAccept("api", 100, 50) // QPS=100, burst=50

任务调度 (pkg/schedule)

轻量级定时任务调度。

  • 基于间隔的任务调度
  • 任务标签管理
  • 支持按函数名、引用、标签移除任务
  • 全局默认调度器和独立调度器
  • 支持 RunPending、RunAll 等运行模式
schedule.Every(60).Do(myFunc).Tag("cleanup")
schedule.Start()

任务池 (pkg/workpool)

Goroutine 工作池。

  • 最大 worker 数量控制
  • 空闲 goroutine 自动回收
  • 原子指标统计(创建数、活跃数、完成任务数)
  • 支持同步提交(SubmitAndWait)和异步提交(Submit)
  • 优雅关闭,处理剩余任务
pool := workpool.NewWorkerPool("my-pool", 10, 5*time.Minute)
defer pool.Stop()
pool.Submit(func() { /* do work */ })

队列 (pkg/queue)

内存队列实现。

  • RingQueue: 基于环形缓冲区的无锁队列
  • PriorityQueue: 优先级队列
  • 支持单条和批量 Pop
q := queue.NewRingQueue(1024)
q.Push("message")
msg, ok := q.Pop()

集合 (pkg/sets)

类型安全的集合操作。

  • 基础类型: ByteSet、IntSet、Int32Set、Int64Set、StringSet
  • 集合操作: 并集、交集、差集、对称差集
  • 子集/超集判断
  • 线程安全选项

有序集合 (pkg/orders)

保持插入顺序的集合数据结构。

  • OrderedMap: 有序键值对映射
  • OrderedSet: 有序元素集合
  • 提供 Size、Empty、Values、String 等接口

流式二进制 (pkg/stream)

二进制流读写工具。

  • Reader: 支持 Varint、固定长度整数、Byte、Slice 等读取操作
  • Writer: 支持对应的写入操作
  • 支持 Seek 和 Reset
  • 内置编码格式支持

存储引擎 (pkg/storage)

轻量级时序数据存储。

  • 基于分区(Partition)的数据组织
  • 标签(Label)过滤查询
  • 时间范围查询(Select by name, labels, start, end)
  • 内存分区和分区列表管理

临时缓冲 (pkg/temporary)

io.Reader 转换为 io.ReadSeeker

  • 超过阈值自动从内存缓冲切换到临时文件
  • 支持同步和异步读取模式
  • 支持 ReadCloser 自动关闭
  • 实现 io.Reader、io.Seeker、io.Closer 接口

位图操作 (pkg/bit)

二进制位操作。

  • Reader: 从字节流中按位读取
  • Writer: 向字节流中按位写入

追踪 (pkg/tracing)

分布式追踪(OpenTracing + OpenTelemetry)。

  • OpenTracing 桥接: 兼容 OpenTracing API
  • Jaeger: Jaeger tracer 集成和远程采样
  • OTLP: OpenTelemetry Protocol 导出(gRPC/HTTP)
  • 工具函数: StartSpan、DoInSpan、DoWithSpan、DoInSpanWithErr
  • 上下文传递: CopyTraceContext、ContextWithTracer
  • 强制采样: 通过 X-Force-Tracing header 强制采样

工具函数 (pkg/utils)

常用工具函数集合。

  • 字符串操作: 格式化、转换等
  • Map 操作: 类型安全的键值访问
  • Slice 操作: 切片工具
  • 时间操作: Duration 解析、定时器工具
  • 时间戳: 时间戳处理
  • 版本号比较: 语义化版本比较
  • 文件操作: 文件工具
  • 数据对比: 对象 diff

比特掩码 (pkg/bufioutil)

IO 缓冲区优化工具。

配置加载器 (pkg/config/loader)

TOML 配置文件加载。

自定义 TOML (pkg/config/ltoml)

增强的 TOML 配置解析。

License

FOSSA Status

Apache-2.0

Packages

 
 
 

Contributors

Languages