go - 在 Go 中加载动态 yaml 结构

标签 go dynamic yaml

<分区>

我正在尝试将一些 Python 代码转换为 Golang,但我在弄清楚如何加载动态 yaml 数据时遇到了一些困难,我认为这是非常基础的。到目前为止,我发现的所有方法都提到创建 Struct 和映射值,但这是不可能的,因为我将接收的数据每次读取时都会不同。

这不是真实数据(实际上会从 API 返回),而是一个 yaml 文件示例:

[ ~]$ cat /tmp/example.yaml
Massachusetts:
  cities:
    - name: 'Boston'
      area_code: 617
    - name: 'Springfield'
    - name: 'Worcester'
Virginia:
  cities:
    - name: 'Richmond'
    - name: 'Arlington'
      landmarks:
        - 'The Pentagon'
        - 'National Airport'
        - 'Arlington National Cemetary'
  presidents:
    - 'George Washington'
    - 'Thomas Jefferson'
    - 'James Madison'
    - 'James Monroe'
    - 'William Henry Harrison'
    - 'John Tyler'
Missouri:
  rivers:
    - 'Missouri River'
    - 'Mississippi'
    - 'Arkansas River'
    - 'White River'

在 Python 中读取和操作它很简单:

#!/usr/bin/python
import yaml
with open('/tmp/example.yaml', 'r') as fh:
    data = yaml.load(fh)

print yaml.dump(data, default_flow_style=False)

由于我是 Go 的新手,有谁知道我应该使用哪种技术/我应该寻找哪些文档可以完成此 Python 代码的功能?

最佳答案

最受欢迎之一go yaml packages在他们的文档中有这个确切的例子:

package main

import (
        "fmt"
        "log"

        "gopkg.in/yaml.v2"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

func main() {
     m := make(map[interface{}]interface{})

     err := yaml.Unmarshal([]byte(data), &m)
     if err != nil {
         log.Fatalf("error: %v", err)
     }
     fmt.Printf("--- m:\n%v\n\n", m)
}

正如 Flimzy 在他上面的评论中指出的那样,现在由您的应用动态处理架构。我觉得这可能符合“读取模式”的条件,并且与使用静态数据定义的方法相比,这种方法有很多权衡:

  • 类型断言/检查必须在运行时处理,在解码之后
  • 模式必须在逻辑和断言中编码而不是声明
  • ??

如果您真的拥有动态数据,我肯定会质疑?

关于go - 在 Go 中加载动态 yaml 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50276670/

相关文章:

python - 如何在 PowerPoint 中使用 Python Seaborn 可视化?

python - 如何在 YAML 中指定始终使用 dictConfig 在项目文件夹中创建日志文件?

Perl 的 YAML::XS 和 unicode

templates - Golang 模板从字符串数组生成值错误

go - 如何在 Go 中解析包含各种元素的巨大 XML 文件?

php - PHP 如何访问 div 的 'style' 属性?

c# - 如何从代码运行 Azure DevOps 管道?

unit-testing - 我如何在单元测试中限制/门内存使用

go - 停止单个goroutine的最佳方法?

ios - 如何在 iOS 下动态加载字体。 (真正的)