Go-Mod-Configuration: Go 项目配置管理解决方案
go-mod-configuration
是一个专为 Go 项目设计的模块化配置管理工具,支持多源配置加载、热更新和类型安全访问。
核心特性
1. 多格式支持
// 支持格式:
config.Load("app.yaml") // YAML
config.Load("app.json") // JSON
config.Load("app.toml") // TOML
config.Load("app.env") // ENV
2. 多数据源集成
// 示例代码 - 多源配置加载
cfg, err := configuration.NewBuilder().
AddSource(file.NewSource("configs/app.yaml")).
AddSource(env.NewSource("APP_")).
AddSource(consul.NewSource(&consul.Config{
Address: "localhost:8500",
Path: "services/my-app",
})).
Build()
3. 分层配置覆盖机制
优先级顺序:
1. 命令行参数 (最高)
2. 环境变量
3. 本地配置文件
4. 远程配置中心 (最低)
API设计
基础用法示例
type ServerConfig struct {
Host string `config:"host"`
Port int `config:"port"`
}
func main() {
var cfg ServerConfig
// 自动绑定到结构体
if err := config.UnmarshalKey("server", &cfg); err != nil {
panic(err)
}
fmt.Printf("Server: %s:%d", cfg.Host, cfg.Port)
}
Watch热更新示例
watcher, err := config.Watch("database")
if err != nil {
log.Fatal(err)
}
go func() {
for event := range watcher.EventChan() {
log.Println("Config changed:", event.Key, event.Value)
// Type-safe取值示例:
timeout := config.GetInt("database.timeout")
connStr := config.GetString("database.connection_string")
// ...处理配置变更...
}
}()
GitHub资源
推荐实现库:
Viper - https://github.com/spf13/viper
go get github.com/spf13/viper@latest
Koanf - https://github.com/knadh/koanf
go get github.com/knadh/koanf/v2@latest
Configor - https://github.com/jinzhu/configor
go get github.com/jinzhu/configor@v1.2
Docker集成示例
# Dockerfile片段展示环境变量注入方式:
FROM golang:1.18-alpine
ENV APP_DB_HOST=postgres \
APP_DB_PORT=5432 \
APP_LOG_LEVEL=info
COPY . /app
WORKDIR /app
RUN go build -o myapp .
CMD ["./myapp"]
需要更详细的实现指导或具体场景的代码示例吗?
内容由零声教学AI助手提供,问题来源于学员提问