基于 Yaml 的 Go 结构选择器

Yaml Based Selector For Go Structures

提问人:404 提问时间:3/5/2023 更新时间:3/5/2023 访问量:60

问:

对于具有从 yaml 取消封组的定义的结构

type Complex struct {
  Im float `yaml:"im"`
  Re float `yaml:"re"`
}
type A struct {
   Property int `yaml:"prop"`
   Items []*Complex `yaml:"items"`
}

type B struct {
   Nested *A `yaml:"sub"`
}

有没有办法从实例化的变量中解析值,例如

var b B = initiateWhatever()

基于 YAML 空间的路径(而不是 Go 属性名称)

targetValue := resolve(b, "sub.prop")

或者,甚至可能有任何工具可以进行复杂的选择,就像 json 或 yaml 一样。但这个想法仍然是操作的不是序列化数据,而是实例化结构,它自己jqyq

itemReals := resolve(b, "sub.items[*].re") // array of floats desired here
yaml

评论

1赞 erik258 3/5/2023
Go 是一种静态语言。它的行为不像 javascript 对象。当您尝试使结构字段名称动态化时,您会与语言作斗争。不过,你可以通过反思来做到这一点。struct
0赞 flyx 3/6/2023
如果反序列化为而不是特定的结构,您将拥有一个通用数据结构,您可以在其中轻松实现类似的东西。不过,它没有现有的 API;yq 请求公共 APIyaml.Node

答: 暂无答案