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"
@jgeek
Copy link

jgeek commented Aug 18, 2024

what if i have nested config in yaml file. i did not work
thirdparty:
api:
key: "key1"
"baseUrl": "example.com"

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