亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang使用信號量熱更新的實現示例

發布時間:2020-09-08 07:56:28 來源:腳本之家 閱讀:206 作者:wshelly 欄目:編程語言

配置文件熱更新是服務器程序的一個基本功能,通過熱更新可以不停機調整程序的配置,特別是在生產環境可以提供極大的便利,比如發現log打得太多了可以動態調高日志等級,業務邏輯參數變化,甚至某個功能模塊的開關等都可以動態調整。

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 {} 
} 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼结县| 宜州市| 樟树市| 宁晋县| 长宁县| 邓州市| 敖汉旗| 安顺市| 屏南县| 阆中市| 磴口县| 南投市| 云和县| 龙里县| 新河县| 清新县| 泗水县| 英吉沙县| 新源县| 漳平市| 夏津县| 巴塘县| 新宾| 峨边| 高阳县| 江华| 岗巴县| 巴南区| 天长市| 临湘市| 北票市| 手游| 琼结县| 武隆县| 威海市| 澳门| 辰溪县| 庆安县| 嘉黎县| 安国市| 揭东县|