I use https://github.com/BurntSushi/toml for parsing the configuration file. Because the library use the struct type for the configuration variable, we have to access the struct fields with a dot to get a value.
[code]config.Database.Username[/code]
But I want to do it dynamically. I want to create a function that receive a string type key and return the configuration value. So I do it with this way.
[code]package main
import ( “fmt” “os” “reflect” “strings” “github.com/BurntSushi/toml” )
type tomlConfig struct { Database databaseInfo Title string }
type databaseInfo struct { Username string Password string }
// Function to get struct type variable by index name func GetField(t *tomlConfig, field string) string { r := reflect.ValueOf(t) f := reflect.Indirect(r)
splitField := strings.Split(field, “.”) for _, s := range splitField { f = f.FieldByName(strings.Title(s)) }
return f.String() }
// Function to get config by string func GetConfig(key string) string { var config tomlConfig if _, err := toml.Decode( ` title = “Text title”
[database] username = “root” password = “password” `, &config); err != nil { fmt.Println(“Please check your configuration file”) os.Exit(1) }
configValue := GetField(&config, key)
return configValue }
func main() { fmt.Println(GetConfig(“testKey”)) fmt.Println(GetConfig(“database.testKey”)) fmt.Println(GetConfig(“title”)) fmt.Println(GetConfig(“database.username”)) fmt.Println(GetConfig(“database.password”)) }[/code]
Result: [code] $ go run main.go Text title root password [/code]