golang配置檔案熱更新

2021-08-19 18:59:25 字數 1370 閱讀 2305

type config struct 

var (

config *config

)func loadconfig

() err = json.unmarshal(f, &config)

if err != nil

}func init()

}()}

package main

import (

"encoding/json"

"fmt"

"io/ioutil"

"log"

"os"

"os/signal"

"sync"

"syscall"

)//用json配置測試

type config struct

var (

config *config

configlock = new(sync.rwmutex)

)func loadconfig() bool

//不同的配置規則,解析複雜度不同

temp := new(config)

err = json.unmarshal(f, &config)

if err != nil

configlock.lock()

config = temp

configlock.unlock()

return

true

}func getconfig() *config

func init()

//熱更新配置可能有多種觸發方式,這裡使用系統訊號量sigusr1實現

s := make(chan os.signal, 1)

signal.notify(s, syscall.sigusr1)

go func()

}()}func main()

}

測試使用後感覺不錯,實現原理如下:

var config value // holds current server configuration

// create initial config value and store into config.

config.store(loadconfig())

go func

()}()

// create worker goroutines that handle incoming requests

// using the latest config value.

for i := 0; i < 10; i++

}()}

golang配置檔案熱更新

配置檔案熱更新是伺服器程式的乙個基本功能,通過熱更新可以不停機調整程式的配置,特別是在生產環境可以提供極大的便利,比如發現log打得太多了可以動態調高日誌等級,業務邏輯引數變化,甚至某個功能模組的開關等都可以動態調整。每種語言都有自己的熱更新實現方式,在golang裡面我看到了有人採用了一種錯誤的實...

golang讀取配置檔案

在專案中往往將一些配置資訊放到配置檔案中,這樣在不同的執行環境中,只需修改配置檔案即可。以下介紹兩種通過第三方包獲取配置檔案的方式 一 通過gopkg.in ini.v1 go get gopkg.in ini.v11.配置檔案 test.conf mqtt mqtt hostname 127.0....

golang 讀取配置檔案vipper

讀取配置檔案的,有toml和vipper兩種好用的方法,toml的方法見 最大的特點就是要為配置檔案構建相對應的結構體,有點囧,現在講乙個vipper。init 初始化配置 func init v viper.new v.setconfigtype yaml v.setconfigname env ...