Skip to content

Instantly share code, notes, and snippets.

@chazcheadle
Created June 7, 2017 04:32
Show Gist options
  • Save chazcheadle/45bf85b793dea2b71bd05ebaa3c28644 to your computer and use it in GitHub Desktop.
Save chazcheadle/45bf85b793dea2b71bd05ebaa3c28644 to your computer and use it in GitHub Desktop.
Golang Viper config read into struct
package main
import (
"fmt"
"github.com/spf13/viper"
)
// Create private data struct to hold config options.
type config struct {
Hostname string `yaml:"hostname"`
Port string `yaml:"port"`
}
// Create a new config instance.
var (
conf *config
)
// Read the config file from the current directory and marshal
// into the conf config struct.
func getConf() *config {
viper.AddConfigPath(".")
viper.SetConfigName("config")
err := viper.ReadInConfig()
if err != nil {
fmt.Printf("%v", err)
}
conf := &config{}
err = viper.Unmarshal(conf)
if err != nil {
fmt.Printf("unable to decode into config struct, %v", err)
}
return conf
}
// Initialization routine.
func init() {
// Retrieve config options.
conf = getConf()
}
// Main program.
func main() {
// Print the config options from the new conf struct instance.
fmt.Printf("Hostname: %v\n", conf.Hostname)
fmt.Printf("Port: %v\n", conf.Port)
}
hostname: "localhost"
port: "9001"
@andorus911
Copy link

andorus911 commented Oct 7, 2020

Hmm. It didn't work. Maybe because I'd used snake_case

upd
Yeah, I was right: spf13/viper#125

@SubashMourougayane
Copy link

How to make this work for TOML file?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment