Documentation
¶
Overview ¶
Package loader provides an opinionated application configuration loader.
It loads defaults from a configuration directory, optionally overlays an explicit profile file selected by alias or environment variable, and scans the merged result into a caller-provided struct.
Index ¶
Examples ¶
Constants ¶
View Source
const ( // ProfilesActiveFromEnvVar Environment variable for switching profiles. // When this environment variable is set, it will override `ProfilesAlias`. ProfilesActiveFromEnvVar = "JIMU_PROFILES_ACTIVE" )
Variables ¶
This section is empty.
Functions ¶
func Load ¶
Example ¶
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/go-jimu/components/config/loader"
)
type exampleOptions struct {
Name string `yaml:"name"`
Age int `yaml:"age"`
}
func main() {
oldProfile, hadProfile := os.LookupEnv(loader.ProfilesActiveFromEnvVar)
os.Unsetenv(loader.ProfilesActiveFromEnvVar)
defer func() {
if hadProfile {
os.Setenv(loader.ProfilesActiveFromEnvVar, oldProfile)
return
}
os.Unsetenv(loader.ProfilesActiveFromEnvVar)
}()
dir, err := os.MkdirTemp("", "components-loader-example")
if err != nil {
panic(err)
}
defer os.RemoveAll(dir)
if err := os.WriteFile(filepath.Join(dir, "defaults.yml"), []byte("name: default\nage: 18\n"), 0o600); err != nil {
panic(err)
}
if err := os.WriteFile(filepath.Join(dir, "app_dev.yml"), []byte("name: dev\n"), 0o600); err != nil {
panic(err)
}
var opts exampleOptions
err = loader.Load(
&opts,
loader.WithConfigurationDirectory(dir, "defaults"),
loader.WithConfigFilePrefix("app"),
loader.WithProfilesAlias("dev"),
)
if err != nil {
panic(err)
}
fmt.Println(opts.Name, opts.Age)
}
Output: dev 18
Types ¶
type Option ¶
type Option func(*loadOptions)
func WithConfigFilePrefix ¶ added in v0.9.9
func WithConfigurationDirectory ¶ added in v0.5.9
func WithEnvVarsPrefix ¶
func WithProfilesActiveFromEnvVar ¶ added in v0.5.9
func WithProfilesActiveFromEnvVar() Option
func WithProfilesAlias ¶
Click to show internal directories.
Click to hide internal directories.