title: How to unmarshall viper config to struct with dash character
body: <p>I have this following config file defined as toml file:</p>
  
  <pre><code>[staging]
  project-id = "projectId"
  cluster-name = "cluster"
  zone = "asia-southeast1-a"
  </code></pre>
  
  <p>Then, I have this struct </p>
  
  <pre><code>type ConfigureOpts struct {
      GCPProjectID       string `json:"project-id"`
      ClusterName        string `json:"cluster-name"`
      Zone               string `json:"zone"`
  }
  </code></pre>
  
  <p>Notice that I have different format of ConfigureOpts fieldname vs the one defined in the config file.</p>
  
  <p>I've tried this code, but failed</p>
  
  <pre><code>test_opts := ConfigureOpts{}
  fmt.Printf("viper.staging value %+v\n", viper.GetStringMap("staging"))
  viper.UnmarshalKey("staging", &amp;test_opts)
  fmt.Printf("testUnmarshall %+v\n", test_opts)
  </code></pre>
  
  <p>Here is the output</p>
  
  <pre><code>viper.staging value map[zone:asia-southeast1-a project-id:projectId cluster-name:cluster]
  
  testUnmarshall {GCPProjectID: ClusterName: Zone:asia-southeast1-a AuthMode: AuthServiceAccount:}
  </code></pre>