当前位置: 首页 > 知识库问答 >
问题:

求推荐一个golang下使用配置文件的库,要求能保留注释?

逄学潞
2024-03-24

用了viper,但更新配置后注释没了,这太要命了,找了一圈没发现合适的,配置文件可以是json5yaml,别的类型不能储存复杂数据

谢谢

共有1个答案

逄宁
2024-03-24

我也找过,目前只发现一个办法。像是 go-yaml 这个库提供了 yaml.Node 结构,Marshal/Unmarshal 到这个结构可以保留注释信息。

package mainimport (    "log"    "strings"    yaml "gopkg.in/yaml.v3")func main() {    var node yaml.Node    data := []byte(strings.TrimSpace(`block1:    # the comment    map:        key1: a        key2: b    block2:    hi: there`))    log.Printf("INPUT:\n %s", data)    if err := yaml.Unmarshal(data, &node); err != nil {        log.Fatalf("Unmarshalling failed %s", err)    }    results, err := yaml.Marshal(node.Content[0])    if err != nil {        log.Fatalf("Marshalling failed %s", err)    }    log.Printf("RESULT:\n %s", results)}

输出

2009/11/10 23:00:00 INPUT: block1:    # the comment    map:        key1: a        key2: b    block2:    hi: there2009/11/10 23:00:00 RESULT: block1:    # the comment    map:        key1: a        key2: bblock2:    hi: there
 类似资料:
  • 可能重复: 如何使用请求下载图像 我知道获取url就像,我可以获取原始响应主体并将其保存到文件中,但对于大型文件,有没有直接流式处理到文件的方法?比如说,如果我下载了一部电影或者别的什么?

  • 问题内容: 我知道获取网址非常简单,我可以获取原始响应正文并将其保存到文件中,但是对于大型文件,是否可以直接流式传输到文件?就像我要下载电影或类似的东西吗? 问题答案: 奇怪的是,请求没有什么简单的方法。您必须遍历响应并将这些块写入文件: 我通常只是使用。它可以工作,但是如果您需要使用会话或某种身份验证,那么上面的代码也可以工作。

  • 问题内容: 我需要能够使用读取同一键的多个值。配置文件示例: 使用“标准”将有一个带有值的键。但是我需要解析器读取两个值。 在重复键输入之后,我创建了以下示例代码: 第一部分(带有)读入我们的“常规”配置文件,仅保留其值(覆盖/删除其他值),然后得到以下预期输出: 第二部分()使用我的方法将多个值附加到列表中,但输出是 如何摆脱重复的价值观?我期望的输出如下: 要么 (我不在乎是否每个值都在列表中

  • 问题内容: 我需要使用Selenium和保留我的缓存。我有一个Firefox配置文件,并在启动时加载了它: 这可以按预期的方式工作,但 不会 复制缓存。转到,它是空的。我想保留我的缓存,我想直接使用我的个人资料。当前复制并使用配置文件的一部分,但不使用缓存。 使用时如何保持缓存? 问题答案: 找出解决方案。 使用此方法加载配置文件不起作用: 对我来说,这确实有效: 现在,我有了正确的完整缓存。

  • Gradle 2.2 SDK Build Tools 19.0.0。一些特性可能需要更高版本。 译者注: Gradle 版本可以关注:Gradle 官方网站 Android Plugin 版本可关注:Android Plugin for Gradle Release Notes

  • Vue.js 支持 typeScript 的推荐配置: // tsconfig.json { "compilerOptions": { // 与 Vue 的浏览器支持保持一致 "target": "es5", // 这可以对 `this` 上的数据属性进行更严格的推断 "strict": true, // 如果使用 webpack 2+ 或 rollup,可以