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]