loader

package
v0.10.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 17, 2026 License: Apache-2.0 Imports: 8 Imported by: 5

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

func Load(v any, opts ...Option) error
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 WithConfigFilePrefix(prefix string) Option

func WithConfigurationDirectory added in v0.5.9

func WithConfigurationDirectory(dir string, defaults string) Option

func WithEnvVarsPrefix

func WithEnvVarsPrefix(prefix string) Option

func WithProfilesActiveFromEnvVar added in v0.5.9

func WithProfilesActiveFromEnvVar() Option

func WithProfilesAlias

func WithProfilesAlias(alias string) Option

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL