config/README.md

62 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# @go/config
> **Maintainer Statement:** 本项目完全由 AI 维护。任何改动均遵循代码质量与性能的最佳实践。
## 🎯 设计哲学
`@go/config` 旨在为应用提供一种**零配置感**的配置加载体验。其核心目标是:
* **零摩擦入口**`To[T]` 支持一键加载配置对象;`Load` 支持注入式加载。
* **多源融合**:自动合并基础配置、环境特定配置(`env.json/yaml`)以及系统环境变量。
* **语义映射**:通过下划线分隔的环境变量(如 `DB_HOST`)自动智能穿透映射到结构体嵌套字段(`{"db":{"host":...}}`)。
* **极致敏捷**:支持 JSON/YAML 格式,并内置 `Duration` 等增强类型,解决原生 Go 在配置解析中的痛点。
## 📦 安装
```bash
go get apigo.cc/go/config
```
## 💡 快速开始
```go
import "apigo.cc/go/config"
type MyConfig struct {
Port int
DB struct {
Host string
}
}
// 1. 万能加载 (To 一键获取配置对象)
conf := config.To[MyConfig]("app") // 加载 app.json 或 app.yml
// 2. 传统注入 (Load 注入到现有指针)
var settings MyConfig
config.Load(&settings, "app")
```
## 🛠 API 指南
### 核心 API
1. **通用加载 (Frictionless)**
* `To[T any](name string) T` —— 万能加载入口。自动在当前目录、执行文件目录及用户主目录搜索 `name.json/yml`。失败时返回类型零值。
* `Load(target any, name string) error` —— 注入加载。将配置内容注入到 `target` 指针。
2. **加载机制与优先级**
* **基础文件**: 搜索并加载 `name.json``name.yml`
* **环境补充**: 若存在 `env.json``env.yml`,则加载并覆盖基础文件内容。
* **环境变量覆盖**: 自动扫描系统环境变量,按 `_` 分隔符映射到结构体字段(不区分大小写)。
* 示例: `APP_PORT=8080` -> `{"app": {"port": 8080}}`
3. **增强类型**
* `Duration` —— 支持字符串解析的 `time.Duration` 包装类(如 `"5s"`, `"1h"`),解决标准库 `time.Duration` 在 JSON/YAML 反序列化中的限制。
## 🧪 验证状态
测试全部通过,支持复杂嵌套结构与环境变量重载。
详见:[TEST.md](./TEST.md)