-1

実行時に構成ファイルから読み取られる間隔値でグローバル変数を初期化しようとしています。

構成ファイルにはキーと値のペアのセットが含まれています。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
4

1 に答える 1