Open eugene-manuilov opened 3 years ago
👋 Thanks for reporting!
A maintainer will take a look at your issue 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! ❤️
I was trying the same thing in my integration with cobra. I used this workaround for my case:
func init() {
rootCmd.AddCommand(serverCmd)
serverCmd.Flags().StringP("port", "p", "", "server port")
serverCmd.Flags().VisitAll(configureViper("server"))
}
func configureViper(prefix string) (fn func(*pflag.Flag)) {
return func(flag *pflag.Flag) {
prefixedName := strings.Join([]string{prefix, flag.Name}, ".")
if err := viper.BindPFlag(prefixedName, flag); err != nil {
panic(err)
}
env := strings.ReplaceAll(prefixedName, ".", "_")
viper.BindEnv(prefixedName, strings.ToUpper(env))
}
}
I basically iterate though all flags, manually configuring the viper and environment variable biding.
Expected behavior (what you expected to happen):
Actual behavior (what actually happened):
Repl.it link:
Code reproducing the issue:
Environment:
Anything else we should know?: