env
API
env
packageAPI reference for the env
package.
Imports
(6)
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
Load
Method
Load reads all environment variables, filtering by prefix if set.
Parameters
ctx
context.Context
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
t
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
t
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"])
}
}