-
Notifications
You must be signed in to change notification settings - Fork 174
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
The provider order is environment variables first, then flags. If the user sets a value in the environment but not in the flag, the environment value should be used.
To Reproduce
package main
import (
"flag"
"strings"
"testing"
"github.com/knadh/koanf/providers/basicflag"
"github.com/knadh/koanf/providers/env"
"github.com/knadh/koanf/v2"
"github.com/stretchr/testify/assert"
)
type config struct {
Port int `koanf:"PORT"`
Port2 int `koanf:"PORT2"`
}
func TestMain(t *testing.T) {
var k = koanf.New(".")
t.Setenv("TEST_PORT", "8080")
t.Setenv("TEST_PORT2", "8080")
if err := k.Load(env.Provider("TEST_", ".", func(s string) string {
return strings.TrimPrefix(s, "TEST_")
}), nil); err != nil {
t.Fatal(err)
return
}
f := flag.NewFlagSet("test", flag.ExitOnError)
f.String("PORT", "", "port")
f.String("PORT2", "", "port2")
if err := f.Parse([]string{"-PORT2=1234"}); err != nil {
t.Fatal(err)
}
if err := k.Load(basicflag.ProviderWithValue(f, ".", nil, k), nil); err != nil {
t.Fatal(err)
return
}
c := &config{}
if err := k.Unmarshal("", c); err != nil {
t.Fatal(err)
}
assert.Equal(t, 8080, c.Port, "PORT env,no flag") //fail got 0
assert.Equal(t, 1234, c.Port2, "PORT2 env, flag")
}
Expected behavior
c.Port
should be 8080
Please provide the following information):
github.com/knadh/koanf/providers/basicflag v1.0.0
github.com/knadh/koanf/providers/env v0.1.0
github.com/knadh/koanf/v2 v2.1.1
https://github.com/knadh/koanf/blob/master/providers/basicflag/basicflag.go#L99
https://github.com/knadh/koanf/blob/master/providers/posflag/posflag.go#L93
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working