1, 准备配置文件

config.toml

[app]
name = "demo"
host = "0.0.0.0"
port = "8050"
key  = "this is your app key"

2, 定义配置对象

 

// 定义全局变量,为了不被程序在运行时恶意修改,设置成私有变量
var config *Config
// 要想获取配置,单独提供函数,通过这个函数获取全局config对象
func C() *Config {
    return config
}
 
 
type Config struct {
    App   *App   `toml:"app"`
    Log   *Log   `toml:"log"`
    MySQL *MySQL `toml:"mysql"`
}

type App struct {
    Name      string `toml:"name" env:"APP_NAME"`
    Host      string `toml:"host" env:"APP_HOST"`
    Port      string `toml:"port" env:"APP_PORT"`
    Key       string `toml:"key" env:"APP_KEY"`
    EnableSSL bool   `toml:"enable_ssl" env:"APP_ENABLE_SSL"`
    CertFile  string `toml:"cert_file" env:"APP_CERT_FILE"`
    KeyFile   string `toml:"key_file" env:"APP_KEY_FILE"`
}
 
3, 定义配置对象的初始化函数
// 提供初始化函数
func NewDefaultApp() *App {
    return &App{
        Name: "demo",
        Host: "10.10.1.10",
        Port: "8090",
    }
}
 
4, 解析配置文件
import "github.com/BurntSushi/toml"

// 从Toml格式的配置文件加载配置
func LoadConfigFromToml(filepath string) error {
    // 这里的config使用的是全局的config
    config = NewDefaultConfig()
    _, err := toml.DecodeFile(filepath, config)
    //toml.Decode()
    if err != nil {
        return fmt.Errorf("load config from file error, path: %s , %s ", filepath, err)
    }
    return nil
}