var cfg config
configFile := flagSet.Lookup("config").Value.String()//config的值是toml文件的地址。
if configFile != "" {
_, err := toml.DecodeFile(configFile, &cfg)//将toml文件中配置decode成元数据
if err != nil {
logFatal("failed to load config file %s - %s", configFile, err)
}
}
cfg.Validate()//就check两个值一个是tls_required 一个是tls_min_version
options.Resolve(opts, flagSet, cfg)
type config map[string]interface{}
func DecodeFile(fpath string, v interface{}) (MetaData, error) {
bs, err := ioutil.ReadFile(fpath)
if err != nil {
return MetaData{}, err
}
return Decode(string(bs), v)
}
func (cfg config) Validate() {//tls transport layer security
// special validation/translation
if v, exists := cfg["tls_required"]; exists {
var t tlsRequiredOption
err := t.Set(fmt.Sprintf("%v", v))
if err == nil {
cfg["tls_required"] = t.String()
} else {
logFatal("failed parsing tls_required %+v", v)
}
}
if v, exists := cfg["tls_min_version"]; exists {
var t tlsMinVersionOption
err := t.Set(fmt.Sprintf("%v", v))
if err == nil {
newVal := fmt.Sprintf("%v", t.Get())
if newVal != "0" {
cfg["tls_min_version"] = newVal
} else {
delete(cfg, "tls_min_version")
}
} else {
logFatal("failed parsing tls_min_version %+v", v)
}
}
}
###toml文件介绍
TOML 的目标是成为一个极简的配置文件格式.TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析
[owner]
name = "Tom Preston-Werner"
organization = "Github"
bio = "Github Cofounder & CEO\nLikes tater tots and beer."
dob = 1979-05-27T07:32:00Z # 日期时间是一等公民.为什么不呢?
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
# 你可以依照你的意愿缩进.使用空格或Tab.TOML不会在意.
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
具体细节参考地址