func (fl *flagLayer) Load() (map[string]interface{}, error) { if !fl.flags.Parsed() { fl.flags.Parse(os.Args[1:]) } // The default layer has the ablity to deal with nested key. do not copy/paste code here :) inner := onion.NewDefaultLayer() inner.SetDelimiter(fl.GetDelimiter()) for i := range fl.data { switch p := fl.data[i].(type) { case *bool: inner.SetDefault(i, *p) case *time.Duration: inner.SetDefault(i, *p) case *int64: inner.SetDefault(i, *p) case *string: inner.SetDefault(i, *p) } } return inner.Load() }
func main() { conf := onion.New() def := onion.NewDefaultLayer() err := def.SetDefault("port", 6998) panicOnErr(err) err = conf.AddLayer(def) panicOnErr(err) log.Printf("the port is %d (default layer)", conf.GetInt("port")) err = conf.AddLayer(onion.NewFileLayer(filepath.Join(pwd(), "test.json"))) panicOnErr(err) log.Printf("the port is %d (file layer)", conf.GetInt("port")) err = conf.AddLayer(onion.NewEnvLayer("PORT")) panicOnErr(err) log.Printf("the final port is %d, Try to set PORT in env and try again", conf.GetInt("port")) }