Я пытаюсь инициализировать глобальную переменную значением интервала, которое читается из файла конфигурации во время выполнения.
Файл конфигурации содержит набор пар ключ-значение. Как часть функции 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