golang使用信號量熱更新的實(shí)現(xiàn)示例
配置文件熱更新是服務(wù)器程序的一個基本功能,通過熱更新可以不停機(jī)調(diào)整程序的配置,特別是在生產(chǎn)環(huán)境可以提供極大的便利,比如發(fā)現(xiàn)log打得太多了可以動態(tài)調(diào)高日志等級,業(yè)務(wù)邏輯參數(shù)變化,甚至某個功能模塊的開關(guān)等都可以動態(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í)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Goland遠(yuǎn)程連接Linux進(jìn)行項(xiàng)目開發(fā)的實(shí)現(xiàn)
有的時候我們的開發(fā)代碼要在linux服務(wù)器上運(yùn)行,本文主要介紹了Goland遠(yuǎn)程連接Linux進(jìn)行項(xiàng)目開發(fā)的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-06-06
構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn)
這篇文章主要介紹了構(gòu)建Golang應(yīng)用最小Docker鏡像的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
使用Go語言實(shí)現(xiàn)向文件寫入內(nèi)容的示例代碼
向文件寫入內(nèi)容 的完整內(nèi)容,這是文件操作的另一個核心技能,與讀取配套,適用于日志記錄、生成報告、寫配置等場景,本文通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2025-07-07
Golang連接PostgreSQL基本操作的實(shí)現(xiàn)
PostgreSQL是常見的免費(fèi)的大型關(guān)系型數(shù)據(jù)庫,本文主要介紹了Golang連接PostgreSQL基本操作的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-02-02
關(guān)于golang中死鎖的思考與學(xué)習(xí)
本文主要介紹了關(guān)于golang中死鎖的思考與學(xué)習(xí),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
windows下使用vscode搭建golang環(huán)境并調(diào)試的過程
這篇文章主要介紹了在windows下使用vscode搭建golang環(huán)境并進(jìn)行調(diào)試,主要包括安裝方法及環(huán)境變量配置技巧,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09

