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 {}
}golang使用信号量热更新
最新推荐文章于 2025-11-25 13:45:30 发布
本文介绍了一个使用Go语言实现的简单配置文件加载与热更新机制。通过读取JSON配置文件,并利用Go标准库中的json包进行解析,实现了配置项的动态加载。此外,还通过监听系统信号来实现配置文件的热更新功能。
1251

被折叠的 条评论
为什么被折叠?



