发现 gone-io/gone:一个优雅的 Go 依赖注入框架! 它让您的代码更简洁、更易测试。 框架轻量却功能强大,完美平衡了灵活性与易用性。⭐ 如果您喜欢这个项目,请给我们点个星! 您的支持是我们前进的动力! 欢迎贡献代码或提出建议,一起让 gone 变得更好! #golang #依赖注入 #开源 github.com/gone-io/gone
本文原地址:https://github.com/gone-io/goner/blob/main/viper/README.md
gone-viper
是 Gone 框架的配置管理组件,基于 spf13/viper 实现。它为您的 Gone 应用提供灵活而强大的配置管理能力,支持多种配置源和格式,让您的应用配置变得简单高效。
组件会按照以下优先顺序自动查找配置文件:
config
子目录config
子目录Test
函数启动 Gone 时的附加路径:
config
目录testdata
目录testdata/config
目录CONF
或启动时使用了 -conf
选项,还会查找指定的配置文件路径在同一目录中,存在多个配置文件时,组件会按以下顺序加载并合并配置:
默认环境是 local
,可通过环境变量 ENV
或启动参数 -env
修改。环境配置文件按以下顺序加载:
当使用 Test
函数启动 Gone 时,还会额外加载测试专用配置文件 ${default|env}_test.${ext}
。
例如,在以下测试代码中:
func TestCase(t *testing.T){
gone.
Loads(
viper.Load, // 加载配置组件
// 其他组件...
).
Test(func(){
// 测试代码
})
}
系统会按顺序加载存在的配置文件(不存在的文件会被忽略):
重要说明:
go install github.com/gone-io/goner/viper
package main
import (
"github.com/gone-io/v2"
"github.com/gone-io/goner/viper"
)
func main() {
gone.
Loads(
viper.Load, // 加载配置组件
// 其他组件...
).
Run() // 或使用 Serve()
}
type MyService struct {
gone.Flag
// 通过 gone:"config" 标签注入配置,支持默认值
ServerHost string `gone:"config,server.host,default=localhost"`
ServerPort int `gone:"config,server.port,default=8080"`
DbURL string `gone:"config,db.url"`
}
func (s *MyService) Start() error {
// 使用注入的配置值
fmt.Printf("服务运行于 %s:%d\n", s.ServerHost, s.ServerPort)
return nil
}
type MyComponent struct {
gone.Flag
conf gone.Configure `gone:"*"` // 注入配置管理器
}
func (c *MyComponent) DoSomething() error {
// 获取字符串配置
var host string
err := c.conf.Get("server.host", &host, "localhost")
if err != nil {
return err
}
// 获取整数配置
var port int
err = c.conf.Get("server.port", &port, "8080")
if err != nil {
return err
}
// 获取复杂结构体配置
var dbConfig struct {
URL string
Username string
Password string
}
err = c.conf.Get("db", &dbConfig, "")
if err != nil {
return err
}
return nil
}
# 服务器配置
server.host=localhost
server.port=8080
# 数据库配置
db.username=root
db.password=secret
db.database=mydb
# 同文件内支持变量替换
db.url=mysql://localhost:3306/${db.database}
# 日志配置
log.level=info
log.path=/var/log/myapp
server:
host: localhost
port: 8080
db:
url: mysql://localhost:3306/mydb
username: root
password: secret
log:
level: info
path: /var/log/myapp
您可以通过环境变量覆盖配置文件中的值,提高部署灵活性。环境变量命名规则为 GONE_配置键名
,其中配置键名中的点号 .
需替换为下划线 _
。
例如,要覆盖 server.port
配置,可以设置环境变量:
GONE_SERVER_PORT=9090
type Configure interface {
Get(key string, v any, defaultVal string) error
}
获取配置值的核心接口,参数说明:
key
:配置键名,支持使用点号分隔的层级结构v
:用于接收配置值的变量指针defaultVal
:默认值,当配置不存在时使用dev.yaml
、prod.yaml
)管理不同环境的配置