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.
Реализация интерфейса https://pkg.go.dev/go.unistack.org/micro/v3/config#Config
Конфиг источники представляют собой методы Save/Load/Watch для заполнения конфигурационного файла из различных источников.
Микросервис предоставляет возможность стекировать конфиг сурсы, а также динамически перенастраивать сервис в зависимости от значений конфигурационной структуры посредством метода Watch.
Наиболее известный вариант использования конфигурационных источников в следующем варианте
cfg := appconfig.NewConfig(appName, AppVersion) // create new empty config
if err := config.Load(ctx,
[]config.Config{
config.NewConfig( // load from defaults
config.Struct(cfg), // pass config struct
),
fileconfig.NewConfig( // load from file
config.AllowFail(true), // that may be not exists
config.Struct(cfg), // pass config struct
config.Codec(jsoncodec.NewCodec()), // file config in json
fileconfig.Path("./local.json"), // nearby file
),
envconfig.NewConfig( // load from environment
config.Struct(cfg), // pass config struct
),
vaultconfig.NewConfig(
config.AllowFail(true), // that may be not exists
config.Struct(cfg), // load from vault
config.Codec(jsoncodec.NewCodec()), // vault config in json
config.BeforeLoad(func(ctx context.Context, c config.Config) error {
return c.Init(
vaultconfig.Address(cfg.Vault.Addr),
vaultconfig.Token(cfg.Vault.Token),
vaultconfig.Path(cfg.Vault.Path),
)
}),
),
}, config.LoadOverride(true),
); err != nil {
logger.Fatalf(ctx, "failed to load config: %v", err)
}
В таком варианте создается стек из источников конфигурации, которые обрабатываются в указанном порядке.
- Конфигурационная структура заполняется параметрами по-умолчанию (параметры задаются посредством аннотаций к полям структуры)
- Чтение из локального файла в формате json/yaml/toml (удобно для локального тестирования)
- Чтение из переменных окружения (обычно используется в кубернетес для задания параметров для следующих конфигурационных источников)
- Чтение из vault конфигурационного файла в котором помимо прочего могут содержаться различные пароли и сертификаты
В конечном итоге существующие значения перезаписываются (опция config.LoadOverride(true)), для массивов или мап можно указать опцию для дополнения, вместо перезаписи значений.
Методы
func Load(context.Context, ...config.LoadOption) error