标签:时间 failed flags read 原因 last 配置文件信息 now() turn
使用ini为后缀的配置文件
使用第三方库为
go get gopkg.in/gcfg.v1
代码样例
package main
import(
"os"
"fmt"
"log"
"time"
"gopkg.in/gcfg.v1"
)
var path string = "conf.ini"
var config *Config
// 获取配置文件相对应的信息
type Config struct{
User map[string]*struct{
UID string
Pid string
}
}
func init(){
log.SetFlags(log.Lshortfile|log.Ltime)
config = &Config{}
}
// 读取
func readConfig()(err error){
if path==""{
err = fmt.Errorf("path is null")
log.Println(err)
return
}
log.Println("读取配置文件")
err = gcfg.ReadFileInto(config,path)
if err!=nil{
err = fmt.Errorf("Failed to parse config file:%s",err)
log.Println(err)
return
}
return
}
func prinfConfigInfo()(err error){
defer func(){
if r:=recover();r!=nil{
err = r.(error)
}
}()
log.Println("每个10秒打印配置文件")
ticker := time.NewTicker(10*time.Second)
for{
select {
case <-ticker.C:
for key,value := range config.User{
log.Printf("%v uid=%v pid=%v \n",key,key,value)
}
}
}
}
func main(){
fmt.Println("读取配置文件信息")
err := readConfig()
if err!=nil{
log.Println(err)
return
}
fmt.Println("打印配置信息")
err = prinfConfigInfo()
if err!=nil{
log.Println(err)
}
}
配置文件内容(conf.ini)
[user "A"]
uid = 45
pid = 54
[user "B"]
uid = 12
pid = 12
package main
import(
"os"
"fmt"
"log"
"time"
"sync/atomic"
"gopkg.in/gcfg.v1"
)
var path string = "conf.ini"
var lastModTime = time.Now().Unix() // 获取目前的时间
var config *Config
// 获取配置文件相对应的信息
type Config struct{
User map[string]*struct{
UID string
Pid string
}
}
func init(){
log.SetFlags(log.Lshortfile|log.Ltime)
config = &Config{}
}
// 读取
func readConfig()(err error){
if path==""{
err = fmt.Errorf("path is null")
log.Println(err)
return
}
log.Println("读取配置文件")
err = gcfg.ReadFileInto(config,path)
if err!=nil{
err = fmt.Errorf("Failed to parse config file:%s",err)
log.Println(err)
return
}
return
}
func prinfConfigInfo()(err error){
defer func(){
if r:=recover();r!=nil{
err = r.(error)
}
}()
log.Println("每个10秒打印配置文件")
ticker := time.NewTicker(10*time.Second)
for{
select {
case <-ticker.C:
for key,value := range config.User{
log.Printf("%v uid=%v pid=%v \n",key,key,value)
}
}
}
}
func monitor(){
log.Println("设置监听时间")
ticker := time.NewTicker(10*time.Second)
log.Println("启动监听器")
for{
select{
case <-ticker.C:
// 使用匿名函数是关闭文件
func(){
if path==""{
err := fmt.Errorf("path is null")
log.Println(err)
return
}
fmt.Println("打开配置文件")
file,err := os.Open("conf.ini")
if err!=nil{
err = fmt.Errorf("打开配置文件错误:%v",err)
log.Println(err)
return
}
defer file.Close()
fmt.Println("获取配置信息")
fileInfo,err := file.Stat()
if err!=nil{
err = fmt.Errorf("获取配置文件信息错误:%v",err)
log.Println(err)
return
}
modtime := fileInfo.ModTime()
if modtime.Unix()>lastModTime{
log.Println("配置文件已经修改啦,通知各个部门")
lastModTime = modtime.Unix()
err:= readConfig()
if err!=nil{
err = fmt.Errorf("重新读取配置文件错误:%v",err)
log.Println(err)
return
}
}else{
return
}
}()
}
}
}
func main(){
fmt.Println("读取配置文件信息")
log.Println("监听文件是否修改")
go monitor()
err := readConfig()
if err!=nil{
log.Println(err)
return
}
fmt.Println("打印配置信息")
err = prinfConfigInfo()
if err!=nil{
log.Println(err)
}
}
标签:时间 failed flags read 原因 last 配置文件信息 now() turn
原文地址:https://www.cnblogs.com/MyUniverse/p/11748243.html