【发布时间】:2023-03-06 03:55:01
【问题描述】:
我正在尝试将一些 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 代码的功能?
【问题讨论】:
-
如上所述,我一直找不到像 Python 的 yaml.load() 这样的解决方案。我对“golang yaml”的谷歌搜索只返回了指向手动将返回的数据映射到预定义结构的结果,这不适用于该数据。您的搜索是否返回了不同的内容?
-
是的,Go 就是这样工作的,因为 Go 是静态类型的。
-
任何静态类型语言都无法做到这一点。你可以解组到
interface{},但这只是推迟了问题——现在你必须在事后进行类型断言,而不是在解组之前。 -
我真的看不出这个问题有资格关闭的理由