go-pkg-sdk 是一个模块化、易用、生产就绪的 Go SDK,旨在帮助开发者快速替换老项目中的常用模块。
设计目标:
- 🎯 模块独立:每个模块可单独使用
- 📚 丰富示例:每个模块提供 5+ 个实际用例
- 🏗️ 统一风格:所有模块采用一致的 API 设计
- ⚡ 生产就绪:经过实战验证,可直接用于生产环境
已创建完整的项目目录结构,支持模块化开发:
go-pkg-sdk/
├── config/ # ✅ 配置模块(已完成)
├── logger/ # ⏳ 日志模块(待开发)
├── httpclient/ # ⏳ HTTP客户端(待开发)
├── examples/ # 📖 综合示例
└── docs/ # 📄 文档
基于您提供的 koanf 实现,已完成配置管理模块。
核心功能:
- ✅ 多配置源支持:文件(YAML)、环境变量、远程配置
- ✅ 配置热更新:文件监控、远程配置推送
- ✅ 配置变更日志:自动记录变更历史
- ✅ 敏感信息脱敏:自动隐藏密码、token 等
- ✅ 线程安全:支持并发读取
核心文件:
config/
├── config.go # 配置核心实现
├── option.go # Options 模式
├── watcher.go # 文件监控
├── change_logger.go # 变更日志
├── remote.go # 远程配置接口
├── provider.go # 配置提供者
└── README.md # 模块文档
5 个使用示例:
| 示例 | 说明 | 路径 |
|---|---|---|
| 01 | 基础用法 - 从文件读取配置 | config/examples/01_basic_usage/ |
| 02 | 环境变量覆盖 - 不同环境配置 | config/examples/02_env_override/ |
| 03 | 文件监控 - 配置热更新 | config/examples/03_file_watch/ |
| 04 | 远程配置 - Apollo 接入示例 | config/examples/04_remote_config/ |
| 05 | 配置变更通知 - 日志和回调 | config/examples/05_change_notification/ |
每个示例都包含:
- ✅ 可运行的完整代码 (
main.go) - ✅ 配置文件 (
config.yaml) - ✅ 详细的 README 说明
已创建完整的项目文档:
| 文档 | 说明 | 状态 |
|---|---|---|
| README.md | 项目主页,快速开始 | ✅ |
| ARCHITECTURE.md | 架构设计文档 | ✅ |
| DIRECTORY_STRUCTURE.md | 目录结构说明 | ✅ |
| config/README.md | Config 模块详细文档 | ✅ |
| LICENSE | MIT 开源许可证 | ✅ |
已建立统一的开发规范:
API 设计模式:
- Options 模式进行配置
- 初始化函数
Init(opts ...Option) - 工厂函数
New(opts ...Option) - 上下文支持
Do(ctx context.Context)
模块结构规范:
module_name/
├── module_name.go # 核心实现
├── option.go # 配置选项
├── README.md # 模块文档
└── examples/ # 5+ 个示例
单独使用某个模块:
import "github.com/silin/go-pkg-sdk/config"
config.Init(config.WithFile("config.yaml"))
value := config.GetString("key")组合使用多个模块:
import (
"github.com/silin/go-pkg-sdk/config"
"github.com/silin/go-pkg-sdk/logger"
"github.com/silin/go-pkg-sdk/httpclient"
)go-pkg-sdk/
├── go.mod # Go 模块定义
├── LICENSE # MIT 许可证
├── .gitignore # Git 忽略规则
├── README.md # 项目主页
├── ARCHITECTURE.md # 架构设计
├── DIRECTORY_STRUCTURE.md # 目录结构说明
├── SUMMARY.md # 项目总结(本文件)
│
├── config/ # ✅ 配置模块
│ ├── config.go
│ ├── option.go
│ ├── watcher.go
│ ├── change_logger.go
│ ├── remote.go
│ ├── provider.go
│ ├── README.md
│ └── examples/
│ ├── 01_basic_usage/
│ │ ├── main.go
│ │ ├── config.yaml
│ │ └── README.md
│ ├── 02_env_override/
│ │ ├── main.go
│ │ ├── config.yaml
│ │ └── README.md
│ ├── 03_file_watch/
│ │ ├── main.go
│ │ ├── config.yaml
│ │ └── README.md
│ ├── 04_remote_config/
│ │ ├── main.go
│ │ ├── config.yaml
│ │ └── README.md
│ └── 05_change_notification/
│ ├── main.go
│ └── README.md
│
└── examples/ # 综合示例
└── quickstart/ # ✅ 快速开始
├── main.go
├── config.yaml
└── README.md
config.Init(
config.WithFile("config.yaml"), // 文件
config.WithEnv("APP_"), // 环境变量
config.WithRemote(apolloProvider), // 远程配置
)str := config.GetString("app.name")
num := config.GetInt("server.port")
bool := config.GetBool("app.debug")
arr := config.GetStringSlice("hosts")type AppConfig struct {
Name string `koanf:"name"`
Port int `koanf:"port"`
}
var cfg AppConfig
config.Unmarshal("app", &cfg)config.Init(
config.WithFile("config.yaml"),
config.WithFileWatcher(), // 启用文件监控
)
config.OnChange(func() {
// 配置变更时自动调用
}){
"type": "config_change",
"source": "file",
"key": "server.port",
"old": "8080",
"new": "9090",
"change": "UPDATE",
"timestamp": "2024-01-01T12:00:00Z"
}包含 password、secret、token、key 的配置自动脱敏为 ******
go get github.com/silin/go-pkg-sdkpackage main
import (
"fmt"
"github.com/silin/go-pkg-sdk/config"
)
func main() {
// 初始化
config.Init(
config.WithFile("config.yaml"),
config.WithEnv("APP_"),
)
// 读取配置
appName := config.GetString("app.name")
port := config.GetInt("server.port")
fmt.Printf("App: %s, Port: %d\n", appName, port)
}# 基础用法
cd config/examples/01_basic_usage
go run main.go
# 环境变量覆盖
cd config/examples/02_env_override
go run main.go
# 文件监控
cd config/examples/03_file_watch
go run main.go
# 快速开始
cd examples/quickstart
go run main.go| 模块 | 状态 | 进度 | 说明 |
|---|---|---|---|
| Config | ✅ 已完成 | 100% | 基于 koanf,包含 9 个示例 |
| Logger | ✅ 已完成 | 100% | 基于 zap,包含 5 个示例,支持 trace、文件切割、远程输出 |
| HTTPClient | ⏳ 待开发 | 0% | 计划基于标准库 |
每个模块都可以独立使用,不强制依赖其他模块。
所有模块采用一致的 Options 模式,降低学习成本。
每个模块提供 5+ 个实际用例,涵盖常见场景。
每个模块都有详细的 README 和 API 文档。
- 线程安全
- 错误处理完善
- 性能优化
- 实战验证
从低到高:
- 文件配置 - 基础配置
- 环境变量 - 覆盖文件配置
- 远程配置 - 最高优先级
示例:
# config.yaml
server:
port: 8080# 环境变量覆盖
export APP_SERVER_PORT=9090 # 实际值为 9090- ✅ 存储默认配置和开发环境配置
- ✅ 不要存储生产环境敏感信息
- ✅ 使用 YAML 格式(易读易写)
- ✅ 用于覆盖特定环境配置
- ✅ 存储敏感信息(密码、密钥)
- ✅ 命名规范:
PREFIX_KEY_PATH
- ✅ 用于动态配置和功能开关
- ✅ 提供本地配置作为兜底
- ✅ 监控远程配置可用性
- 快速开始 →
examples/quickstart/ - 基础用法 →
config/examples/01_basic_usage/ - 环境变量 →
config/examples/02_env_override/ - 文件监控 →
config/examples/03_file_watch/ - 远程配置 →
config/examples/04_remote_config/ - 变更通知 →
config/examples/05_change_notification/ - 完整文档 →
README.md和ARCHITECTURE.md
- 实现 Logger 模块(基于 zap)
- 实现 HTTPClient 模块(基于标准库)
- 添加单元测试(覆盖率 > 80%)
- 创建综合示例(完整应用)
- 添加性能测试和 Benchmark
- 完善 API 文档
- 添加更多模块(Cache、Database、Queue)
- 提供迁移工具和脚本
- 建立社区和生态
- 问题反馈:GitHub Issues
- 功能建议:GitHub Discussions
MIT License - 详见 LICENSE
⭐ 如果这个项目对你有帮助,请给个 Star!