実行時に構成ファイルから読み取られる間隔値でグローバル変数を初期化しようとしています。
構成ファイルにはキーと値のペアのセットが含まれています。init() 関数の一部として、yaml パーサーを使用して値が解析され、構造に格納されます。
package main
import (
"fmt"
"io/ioutil"
"time"
yaml "gopkg.in/yaml.v2"
)
func init(){
PopulateConfig("./test.config")
}
var Conf Config
var Interval = time.Second * Conf.Interval
type Config struct {
Port string `yaml:"port"`
Interval time.Duration `yaml:"interval"`
}
func PopulateConfig(filePath string) {
data, err := ioutil.ReadFile(filePath)
err = yaml.Unmarshal(data, &Conf)
if err != nil {
}
fmt.Println("CONFIG => ", Conf)
}
func main() {
// start timer
fmt.Println("Inside main, Interval = ", Interval)
purgeTicker := time.NewTicker(time.Second * 10)
go Handle(purgeTicker)
time.Sleep(60 * time.Second)
}
func Handle(ticker *time.Ticker) {
fmt.Println("Inside Handle, Interval = ", Interval)
for t := range ticker.C {
fmt.Println("Calling purge timer at ", t)
//Additional processing
}
}
===========================
config file:
# cat test.config
port: 1234
interval: 15
構成値が構造内に正しく取り込まれます。期待される結果は、ファイルから読み取った値でグローバル変数を設定することです。しかし、実際の出力は 0 です。実際の結果:
# ./main
CONFIG => {1234 15ns}
Inside main, Interval = 0s
Inside Handle, Interval = 0s