gpt4 book ai didi

go - 如何在运行时使用从配置文件读取的值初始化全局变量

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:19 29 4
gpt4 key购买 nike

我正在尝试使用在运行时从配置文件中读取的间隔值来初始化全局变量。

配置文件包含一组键值对。作为 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

最佳答案

您已经完成了困难的部分:全局 Conf 对象,其中 YAML 配置被解码到。所以直接引用它:

// var Interval = time.Second * Conf.Interval // <- don't use this

// use Conf.Interval directly

func init() {
PopulateConfig("./test.config")
Conf.Interval = Conf.Interval * time.Second // convert to seconds here
}

func main() {
fmt.Println("Inside main, Interval = ", Conf.Interval)
}

func Handle(ticker *time.Ticker) {
fmt.Println("Inside Handle, Interval = ", Conf.Interval)
}

https://play.golang.org/p/FiheCtV2gtv

关于go - 如何在运行时使用从配置文件读取的值初始化全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001682/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com