【问题标题】:How to read config Key/Value pair from file in Go?如何从 Go 中的文件中读取配置键/值对?
【发布时间】:2019-05-13 16:28:34
【问题描述】:

我在 Node.js 中有一个低延迟应用程序,我正在用它编写一个新的 Go 基线。

node 中的应用使用 config 和一些键/值对。

在 config/index.js 中

var config = {};
config.app = {
    port:9000
};
config.log= {
    level:"error"
}
module.exports=config;

另一个文件 config/key_values.js 包含键/值对,每隔几分钟刷新一次。

module.exports.key_values= {
"key1":"value1",
"key2":"value2",
}

要阅读这篇文章,我只需使用以下代码。

let config = require('./config/index');
let keys_vals = require('./config/key_values.js');

console.log('port', config.app.port); //port 9000
console.log('key1 data -->', keys_vals.key_values['key1']); //key1 data --> value1 

我怎样才能在 Go 中实现同样的目标。我已经检查了Gonfig 的配置实现以及构建结构。

什么应该是更好/最好的方式来实现与我在 Node 中相同的功能?

【问题讨论】:

  • 文件可能每隔几分钟就被重写一次,但你的节点应用程序不会在更改时重新加载它,是吗?
  • 是的,一旦在间隔后从预定作业下载,计时器会在节点应用程序中运行,刷新文件。我用这个。 delete require.cache[require.resolve("./config/key_values.js")]; 虽然这不是 go 实现的问题,但如果需要,我可能会重新启动应用程序以重新加载配置。
  • 这个问题太笼统了。有很多配置格式可供选择(json、yaml、toml、ini 等)。建议将基于意见。如果您遇到问题,请选择一个并提出具体问题。
  • 我确实包含了一个有问题的示例 json 配置,并且需要知道如何通过一些明显的更改来重用它。 yaml 也可以,只是为了确保它以相同的方式工作。
  • 这里真的没有足够的细节。你在哪里存储他的配置?什么系统必须读取它?哪些“事物” 将成为配置的一部分?如果您正在设置您的服务应该监听的端口,那么重新加载并不是您最担心的问题。如果您的服务是 HA,在多个区域/节点上,那么您可能希望使用 K/V 存储,并且可以通过多种方式处理更新,如果是配置文件,您可以使用 fsnotify,或者重用现有的东西像眼镜蛇等......

标签: go


【解决方案1】:

好的。这就是我现在所做的。 config/index.js 现在是带有内容的 config/config.json

{
    "app":{"port":9000},
    "log":{"level":"error"}
}

而 config/key_values.js 是 config/key_values.json

{
    "key1":"value1",
    "key2":"value2"
}

为了读取这个值,我只是以[]byte 的形式读取文件并将其传递给库gjsonfunction GetBytes

所以最终的代码是这样的:

    configFile, err := os.Open("config/config.json")
    byteValue, _ := ioutil.ReadAll(configFile)
    result := gjson.GetBytes(byteValue, "app.port")
    fmt.Println(result) //prints 9000

键值文件也一样。

    configFile, err := os.Open("config/key_values.json")
    byteValue, _ := ioutil.ReadAll(configFile)
    result := gjson.GetBytes(byteValue, "key1")
    fmt.Println(result) //prints value1

之前还尝试使用 struct 来解析配置,如 here 所述。但是这个 gjson 库似乎是我正在搜索的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2017-07-22
    • 2023-04-06
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多