国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

golang使用信號量熱更新的實(shí)現(xiàn)示例

2020-04-01 18:57:35
字體:
供稿:網(wǎng)友

配置文件熱更新是服務(wù)器程序的一個(gè)基本功能,通過熱更新可以不停機(jī)調(diào)整程序的配置,特別是在生產(chǎn)環(huán)境可以提供極大的便利,比如發(fā)現(xiàn)log打得太多了可以動(dòng)態(tài)調(diào)高日志等級,業(yè)務(wù)邏輯參數(shù)變化,甚至某個(gè)功能模塊的開關(guān)等都可以動(dòng)態(tài)調(diào)整。

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   }    //不同的配置規(guī)則,解析復(fù)雜度不同   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)   }    //熱更新配置可能有多種觸發(fā)方式,這里使用系統(tǒng)信號量sigusr1實(shí)現(xiàn)   s := make(chan os.Signal, 1)   signal.Notify(s, syscall.SIGUSR1)   go func() {     for {       <-s       log.Println("Reloaded config:", loadConfig())     }   }() }  func main() {   select {} } 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 公主岭市| 怀宁县| 靖安县| 井冈山市| 山丹县| 磐安县| 阳西县| 武城县| 江山市| 本溪| 京山县| 芦溪县| 南丹县| 济宁市| 凤凰县| 林州市| 屯门区| 淮南市| 淮滨县| 开封县| 延寿县| 宣城市| 大足县| 安岳县| 红原县| 墨脱县| 齐齐哈尔市| 维西| 哈密市| 阿巴嘎旗| 安顺市| 调兵山市| 射洪县| 林西县| 江永县| 新营市| 邻水| 阿尔山市| 富宁县| 沁阳市| 汉阴县|