golang使用信号量热更新
发布时间:2020-12-16 19:13:26 所属栏目:大数据 来源:网络整理
导读:package mainimport ( "encoding/json" "fmt" "io/ioutil" "log" "os" "os/signal" "sync" "syscall")//用json配置测试type Config struct { Test1 string `json:"Test1:` Test2 int `json:"Test1:`}var ( config *Config configLock = new(sync.RWMutex))fu
package main import ( "encoding/json" "fmt" "io/ioutil" "log" "os" "os/signal" "sync" "syscall" ) //用json配置测试 type Config struct { Test1 string `json:"Test1:` Test2 int `json:"Test1:` } var ( config *Config configLock = new(sync.RWMutex) ) func loadConfig() bool { f,err := ioutil.ReadFile("config.json") if err != nil { fmt.Println("load config error: ",err) return false } //不同的配置规则,解析复杂度不同 temp := new(Config) err = json.Unmarshal(f,&config) if err != nil { fmt.Println("Para config failed: ",err) return false } configLock.Lock() config = temp configLock.Unlock() return true } func GetConfig() *Config { configLock.RLock() defer configLock.RUnlock() return config } func init() { if !loadConfig() { os.Exit(1) } //热更新配置可能有多种触发方式,这里使用系统信号量sigusr1实现 s := make(chan os.Signal,1) signal.Notify(s,syscall.SIGUSR1) go func() { for { <-s log.Println("Reloaded config:",loadConfig()) } }() } func main() { select {} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |