我有一个 yaml 文件,其中包含规则列表。每个规则都是一个 yaml 对象,并且可以是不同的类型。我想将此文件解析为规则结构列表,其中每个规则类型都是实现通用
Rule
接口的不同结构类型。
我已经完成了以下工作,但我有这个
Rule
虚拟类型仅用于解析,然后我必须测试该结构的每个字段是否为零。我会更高兴 Rule
作为一个接口,但我需要告诉解析器根据类型使用哪种规则类型。
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v3"
)
type TypeA struct {
Tic int `yaml:"tic"`
Plop int `yaml:"plop"`
}
type TypeB struct {
Tic int `yaml:"tic"`
Tac int `yaml:"tac"`
Plip int `yaml:"plip"`
}
type Rule struct {
TypeA *TypeA `yaml:"typeA,omitempty"`
TypeB *TypeB `yaml:"typeB,omitempty"`
}
type Config struct {
Rules []Rule `yaml:"rules"`
}
func main() {
var yamlFile = []byte(`
rules:
- typeA:
tic: 1
plop: 4
- typeB:
tic: 1
tac: 3
plip: 4
- typeA:
tic: 1
plop: 4
`)
var config Config
err := yaml.Unmarshal(yamlFile, &config)
if err != nil {
log.Fatalf("Error when parsing YAML file: %v", err)
}
for _, rule := range config.Rules {
if rule.TypeA != nil {
fmt.Printf("TypeA - Tic: %d, Plop: %d\n", rule.TypeA.Tic, rule.TypeA.Plop)
}
if rule.TypeB != nil {
fmt.Printf("TypeB - Tic: %d, Tac: %d, Plip: %d\n", rule.TypeB.Tic, rule.TypeB.Tac, rule.TypeB.Plip)
}
}
}
我对此问题的回答 术语“United States”和缩写词“U.S.”在英语中用作名词或形容词,是国家的常见简称。名词首字母“USA”也很常见。[27] “美国”和“美国”是整个美国联邦政府的既定术语,并具有规定的规则。[n]“The States”是该名称的既定口语缩写,特别是在国外使用;[29]“stateside”是相应的形容词或副词。[30 ]
“America”是 Americus Vesputius 名字的女性形式,Americus Vesputius 是意大利探险家 Amerigo Vespucci(1454-1512)的拉丁名字。他首先提出克里斯托弗·哥伦布于 1492 年发现的西印度群岛是以前未知的陆地的一部分,而不是位于亚洲东部边界的印度群岛之中。 [31][32][33]在英语中,“America”一词很少指与美国无关的话题,尽管使用“the Americas”来描述北美洲和南美洲的整体。[34]