# readcfg **Repository Path**: alphabstc/readcfg ## Basic Information - **Project Name**: readcfg - **Description**: No description available - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README see https://blog.csdn.net/STcyclone/article/details/109125921 see ./main/main.go 导入readcfg包后,可以使用Init()函数获得当前环境下配置文件的注释符,然后使用Watch(filename,listener) (configuration, error)函数:该函数的参数filename是配置文件的文件名,参数listener是一个特殊的接口,用来监听配置文件是否被修改,让开发者自己决定如何处理配置变化。例如可以编写listener如下: var lis readcfg.ListenFunc = func(cfgfile string) { before_stat, err := os.Lstat(cfgfile)//获得文件目前的状态 if err != nil { panic(err) } fmt.Println("Listening changes in file......", cfgfile)//输出正在监听文件的信息 for { after_stat, err := os.Lstat(cfgfile)//获得文件当前的状态 if err != nil { panic(err) } if !(before_stat.ModTime().Equal(after_stat.ModTime())) {//修改时间有变化 说明文件有更新 fmt.Println("There are something changed in file ", cfgfile) break//退出循环 控制权回到Watch } time.Sleep(time.Duration(1)*time.Second)//否则睡眠一秒再次查询 } } listiner监听配置文件被修改后,会返回到Watch后面的代码。配置文件没修改时,会阻塞在Watch函数。 Watch函数退出后,会返回对应的configuration和error信息。可以获得Watch返回值的这些信息,然后输出。使用的例子如下: readcfg.Init() for { conf, err := readcfg.Watch(lisfile, lis) if err != nil {//遇到错误 返回 fmt.Println(err) } for s, kvs := range conf {//否则遍历所有Section fmt.Println("Section: ", s) for k, v := range kvs {//遍历所有kv对 fmt.Println("Key:", k, "\tValue:", v)//输出 } fmt.Println() } }