前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang使用信号量热更新

golang使用信号量热更新

作者头像
李海彬
发布2018-03-26 14:02:36
1.6K0
发布2018-03-26 14:02:36
举报
文章被收录于专栏:Golang语言社区Golang语言社区
代码语言:javascript
复制
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 {}  
}  
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档