本框架由 Go-Spring 提供,是其内置的强大配置绑定系统。写配置不再痛苦,让我们一起轻松玩转!
框架亮点抢先看
- ✅ 一行标签写法,配置读取、默认值、校验一步到位
- ✅ 自动绑定各种类型,包括结构体、切片、映射等
- ✅ 表达式校验支持,保障配置合法性
- ✅ 插件式架构,自定义拆分器、类型转换器、配置加载器、校验器一应俱全
标签语法魔法
value:"${key:=默认值}>>拆分器"
字段解释:
${key}
:配置路径(支持嵌套):=默认值
:当 key 未找到时使用>>拆分器
:默认为英文逗号,
,通常无需指定
动态默认值怎么玩?
value:"${DB_HOST:=localhost:${DB_PORT:=3306}}"
默认值还能嵌套定义,保障配置层层有备胎!
类型绑定示例详解
1. 基础类型绑定
type Server struct {
Host string `value:"${host:=127.0.0.1}"`
Port int `value:"${port:=8080}"`
}
配置文件为空时,绑定结果:
Server{Host: "127.0.0.1", Port: 8080}
2. 切片(Slice)
type Config struct {
Features []string `value:"${features}"`
}
配置内容:
features=a,b,c
绑定结果:
[]string{"a", "b", "c"}
默认用英文逗号,
分割,只有特殊格式(如管道符|
)才需自定义拆分器。
3. 映射(Map)
type Config struct {
Services map[string]string `value:"${services}"`
}
配置内容:
services.api=http://api
services.web=http://web
绑定结果:
map[string]string{
"api": "http://api",
"web": "http://web",
}
4. 嵌套结构体
type DB struct {
URL string `value:"${url}"`
Pool int `value:"${pool:=5}"`
}
type AppConfig struct {
DB DB `value:"${db}"`
}
配置内容:
db.url=postgres://localhost
绑定结果:
AppConfig{
DB: DB{
URL: "postgres://localhost",
Pool: 5,
},
}
类型转换器(类型解析器)
想支持特殊类型?注册一个转换器搞定!
RegisterConverter(func(s string) (time.Duration, error) {
return time.ParseDuration(s)
})
使用后,标签中配置字符串会自动转为 time.Duration
。
✅ 校验器(表达式或函数)
表达式校验
type User struct {
Age int `value:"${age}" expr:"$ >= 18"`
Email string `value:"${email}" expr:"contains($, '@')"`
}
自定义校验函数
RegisterValidateFunc("isGmail", func(s string) bool {
return strings.HasSuffix(s, "@gmail.com")
})
使用方式:
Email string `value:"${email}" expr:"isGmail($)"`
支持的配置加载器
配置格式 | 文件扩展名 |
---|---|
JSON | .json |
YAML | .yaml , .yml |
TOML | .toml , .tml |
Properties | .properties |
自定义加载器也很 easy:
RegisterReader(func(b []byte) (map[string]any, error) {
// 自定义解析逻辑
}, ".xml")
组合大法示例
type App struct {
Name string `value:"${app.name:=MyApp}"`
Port int `value:"${app.port:=8000}" expr:"$ > 0 && $ < 10000"`
Features []string `value:"${app.features}"` // 默认逗号分割
Labels map[string]string `value:"${app.labels}"`
}
配置内容:
app.features=login,search,upload
app.labels.env=prod
app.labels.version=v1
绑定结果:
App{
Name: "MyApp",
Port: 8000,
Features: []string{"login", "search", "upload"},
Labels: map[string]string{"env": "prod", "version": "v1"},
}
小结
- 标签式写法让配置声明一目了然
- ️ 内建类型转换 + 表达式校验,写错配置都难
- 插件式设计,灵活扩展各种能力
- Go-Spring 内置支持,无需额外依赖,开箱即用!
赶紧给你的 Go 项目也配上这套“装备”,读配置再也不头秃!