I'm trying to initialize a global variable with an interval value which is read from a configuration file at run time.
The configuration file contains set of key-value pairs.As part of init() function, Using yaml parser the values are parsed and stored in a structure.
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
The config values are populated correctly within the structure. Expected result is to set the global variable with the value read from file. But the actual output is 0. Actual Result:
# ./main
CONFIG => {1234 15ns}
Inside main, Interval = 0s
Inside Handle, Interval = 0s