nsq初始化读取config函数

本文介绍了TOML配置文件格式,其目标是成为简洁的配置选项,易于被各种语言解析,特别是针对nsq的初始化配置读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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] ]

具体细节参考地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值