env API

env

package

API reference for the env package.

S
struct

Provider

Provider implements configuration.Provider for environment variables.

core/configuration/source/env/provider.go:15-18
type Provider struct

Example

p := &env.Provider{Prefix: "APP_"}
data, err := p.Load(ctx)

Methods

Name
Method

Name returns "env".

Returns

string
func (*Provider) Name() string
{
	return "env"
}
Load
Method

Load reads all environment variables, filtering by prefix if set.

Parameters

Returns

map[string]any
error
func (*Provider) Load(ctx context.Context) (map[string]any, error)
{
	data := make(map[string]any)
	env := os.Environ()

	for _, kv := range env {
		k, v, ok := strings.Cut(kv, "=")
		if !ok {
			continue
		}

		if p.Prefix != "" {
			if strings.HasPrefix(k, p.Prefix) {
				key := strings.TrimPrefix(k, p.Prefix)
				if strings.HasSuffix(p.Prefix, "_") {
					// Prefix include underscore
				} else if strings.HasPrefix(key, "_") {
					key = strings.TrimPrefix(key, "_")
				}
				data[strings.ToLower(key)] = v
			}
		} else {
			data[strings.ToLower(k)] = v
		}
	}
	return data, nil
}

Fields

Name Type Description
Prefix string
F
function

New

New creates a new environment variable provider with an optional prefix.

Parameters

prefix
string

Returns

core/configuration/source/env/provider.go:21-23
func New(prefix string) *Provider

{
	return &Provider{Prefix: prefix}
}
F
function

TestProviderLoadWithPrefix

Parameters

core/configuration/source/env/provider_test.go:8-22
func TestProviderLoadWithPrefix(t *testing.T)

{
	t.Setenv("APP_HOST", "localhost")
	t.Setenv("OTHER_HOST", "remote")

	data, err := New("APP_").Load(context.Background())
	if err != nil {
		t.Fatalf("Load() error = %v", err)
	}
	if data["host"] != "localhost" {
		t.Fatalf("host = %v, want localhost", data["host"])
	}
	if _, ok := data["other_host"]; ok {
		t.Fatal("Load() included key outside prefix")
	}
}
F
function

TestProviderLoadWithoutPrefix

Parameters

core/configuration/source/env/provider_test.go:24-34
func TestProviderLoadWithoutPrefix(t *testing.T)

{
	t.Setenv("GO_FOUNDATION_ENV_TEST", "yes")

	data, err := New("").Load(context.Background())
	if err != nil {
		t.Fatalf("Load() error = %v", err)
	}
	if data["go_foundation_env_test"] != "yes" {
		t.Fatalf("go_foundation_env_test = %v, want yes", data["go_foundation_env_test"])
	}
}