Preflight Checklist

  • [X] I have searched the issue tracker for an issue that matches the one I want to file, without success.
  • [X] I am not looking for support or already pursued the available support channels without success.
  • [X] I have checked the troubleshooting guide for my problem, without success.

Viper Version

1.16

Go Version

1.20.4

Config Source

Files

Format

YAML

Repl.it link

No response

Code reproducing the issue

// RootDir would not be set the value
// in Annotation, space char after mapstructure 
// bad
type Log struct {
    Level      string `mapstructure:"level"  json:"level" yaml:"level"`
    RootDir    string `mapstructure: "root_dir" json:"root_dir" yaml:"root_dir"`
}


// good
// in Annotation, no space char after mapstructure 
type Log struct {
    Level      string `mapstructure:"level"  json:"level" yaml:"level"`
    RootDir    string `mapstructure:"root_dir" json:"root_dir" yaml:"root_dir"`
}

by this way to load the yaml and set the value

// Init Config
package boostrap

import (
    "fmt"
    "gin-oam-cni/global"
    "os"

    "github.com/fsnotify/fsnotify"
    "github.com/spf13/viper"
)



// My Init func
func InitConfig() *viper.Viper {
    configFile := "config.yaml"
    if configEnv := os.Getenv("VIPER_CONFIG"); configEnv != "" {
        configFile = configEnv
    }

    // init viper
    v := viper.New()
    v.SetConfigFile(configFile)
    v.SetConfigType("yaml")
    v.AddConfigPath(".")
    if err := v.ReadInConfig(); err != nil {
        panic(fmt.Errorf("read config failed: %w", err))
    }

    // dym load config
    v.WatchConfig()
    v.OnConfigChange(func(in fsnotify.Event) {
        fmt.Println("config file changed:", in.Name)
        if err := v.Unmarshal(&global.App.Config); err != nil {
            fmt.Println(err)
        }
    })

    // unmarshal, it also has no error while no set the value !!! bug
    if err := v.Unmarshal(&global.App.Config); err != nil {
        fmt.Println(err)
    }

    return v
}

Expected Behavior

two code, RootDir value must be set both.

Actual Behavior

RootDir value must be set.

but only: IN GOOD CODE: Level, RootDir has set. IN BAD CODE: Level has set.

two code has diff in Annotation, space char after mapstructure or not.

Steps To Reproduce

No response

Additional Information

No response

Comment From: github-actions[bot]

👋 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! ❤️

Comment From: amankr-novo

Hey there, Any update on this? I am too facing this similar issue with JSON configurations files

Comment From: github-actions[bot]

Issues with no activity for 30 days are marked stale and subject to being closed.