【发布时间】:2018-01-14 22:09:46
【问题描述】:
我有一个带有动态模式的 YAML 结构,例如我可以有以下yaml:
array:
- name: myvar
val: 1
- name: mymap
val: [ 1, 2]
Goyaml 将 yaml 映射到 Go 结构,它应该声明明确的类型。这里,val 要么是一个符号数,要么是一个数组,甚至是一个映射。
这种情况的最佳解决方案是什么?
【问题讨论】:
-
您尝试将
interface{}用作val的类型吗? -
具体来说,你可以使用
interface{}作为类型,然后使用类型开关(tour.golang.org/methods/16)来使用它。 -
@RayfenWindspear,TehSphinX 谢谢,这种方法没有缺点吗?
-
我认为没有其他方法,除非您更改 yaml 并为变量指定不同的名称。如果你有一个
interface{}类型的变量,你将不得不稍后根据它的类型来转换它。这有点工作,但你在下面得到了很好的建议。 -
@TehSphinX 正确,处理
interface{}值有点痛苦,但 go 的优点是它是静态类型的,但您可以执行这种伪松散类型。不过,必须付出额外的努力才能完成。