spf13 / viper

Go configuration with fangs
MIT License
26.92k stars 2.02k forks source link

Add support for slices when using environement variables #1785

Open TheoBrigitte opened 6 months ago

TheoBrigitte commented 6 months ago

Fixes: https://github.com/spf13/viper/issues/1732

Following up on @lwlee2608 great work from https://github.com/spf13/viper/pull/1733, here is a PR which adds support for using slices with environment variables and provide an additional fix to ensure we are not limited by the original config slice length.

Here is an example yaml config file :

clients:
  - name: foo
  - name: bar
  - name: baz

Values can now be overriden using

CLIENTS_0_NAME=one
CLIENTS_1_NAME=two
CLIENTS_2_NAME=three

Note that for this solution to work the config must be initialized as folow:


    var yamlConfig = []byte(`
clients:
  - name: foo
  - name: bar
  - name: baz
`)

    viper.SetConfigType("yaml")
    r := strings.NewReader(string(yamlConfig))
    viper.ReadConfig(r)
    SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
    AutomaticEnv()
    // Configuration must have the same structure as yamlConfig
    var config Configuration
    v.Unmarshal(&config)
CLAassistant commented 6 months ago

CLA assistant check
All committers have signed the CLA.

github-actions[bot] commented 6 months ago

👋 Thanks for contributing to Viper! You are awesome! 🎉

A maintainer will take a look at your pull request shortly. 👀

In the meantime: We are working on Viper v2 and we would love to hear your thoughts about what you like or don't like about Viper, so we can improve or fix those issues.

⏰ If you have a couple minutes, please take some time and share your thoughts: https://forms.gle/R6faU74qPRPAzchZ9

📣 If you've already given us your feedback, you can still help by spreading the news, either by sharing the above link or telling people about this on Twitter:

https://twitter.com/sagikazarmark/status/1306904078967074816

Thank you! ❤️

sagikazarmark commented 4 months ago

Thanks @TheoBrigitte ! I'm gonna need some time to review this, but it looks good.