package config import ( "fmt" "os" "etcd/program/common" "github.com/naoina/toml" ) // Config 配置 type Config struct { Debug bool `toml:"debug"` LogPath string `toml:"log_path"` HTTP *HTTP `toml:"http"` DB *MsSQLConfig `toml:"db"` ETCD *EtcdConfig `toml:"etcd"` } // HTTP http 件套配置 type HTTP struct { Address string `toml:"address"` Port int `toml:"port"` TLSEnable bool `toml:"tls_enable"` // 是否启用tls连接 TLSConfig *HTTPTls `toml:"tls_config"` // 启用tls时必须配置此内容 TLSEncryptEnable bool `toml:"tls_encrypt_enable"` // 是否启用 Let's Encrypt tls TLSEncryptDomainNames []string `toml:"tls_encrypt_domain_names"` // 启用 Let's Encrypt 时的域名列表 } // HTTPTls http tls配置 type HTTPTls struct { CertFile string `toml:"cert_file"` KeyFile string `toml:"key_file"` } // MySQLConfig 数据库配置 type MySQLConfig struct { Debug bool `toml:"debug"` // 是否调试模式 Address string `toml:"address"` // 数据库连接地址 Port int `toml:"port"` // 数据库端口 MaxIdleConns int `toml:"max_idle_conns"` // 连接池最大连接数 MaxOpenConns int `toml:"max_open_conns"` // 默认打开连接数 User string `toml:"user"` // 数据库用户名 Passwd string `toml:"passwd"` // 数据库密码 DbName string `toml:"db_name"` // 数据库名 } type MsSQLConfig struct { Debug bool `toml:"debug"` // 是否调试模式 Address string `toml:"address"` // 数据库连接地址 Port int `toml:"port"` // 数据库端口 MaxIdleConns int `toml:"max_idle_conns"` // 连接池最大连接数 MaxOpenConns int `toml:"max_open_conns"` // 默认打开连接数 User string `toml:"user"` // 数据库用户名 Passwd string `toml:"passwd"` // 数据库密码 DbName string `toml:"db_name"` // 数据库名 } // Config etcd 连接配置 type EtcdConfig struct { EtcdId int32 `toml:"etcd_id"` Version string `toml:"version"` Address string `toml:"address"` TlsEnable bool `toml:"tls_enable"` CertFile string `toml:"cert_file"` KeyFile string `toml:"key_file"` CaFile string `toml:"ca_file"` Username string `toml:"username"` Password string `toml:"password"` } var ( cfg *Config ) // GetCfg 获取配置 func GetCfg() *Config { if cfg == nil { LoadConfig("") } return cfg } // LoadConfig 读取配置 func LoadConfig(cfgPath string) (*Config, error) { cfgPath = getCfgPath(cfgPath) f, err := os.Open(cfgPath) fmt.Println(cfgPath) if err != nil { return nil, err } defer f.Close() cfg = new(Config) if err := toml.NewDecoder(f).Decode(cfg); err != nil { return nil, err } return cfg, nil } func getCfgPath(cfgPath string) string { if cfgPath == "" { cfgPath = common.GetRootDir() + "config/cfg.toml" } return cfgPath }