我正在编写一些代码来解析 YAML 文件并验证其中的数据。如果找到的值不符合要求,每个解析器都会返回一个错误。现在我正在创建一个错误数组,并将每次调用的返回设置为数组中的不同索引。我当前的实现是有效的,但它似乎是错误的,我想看看是否有更好的方法来实现这一点。
这是一个例子
func createStruct(yamlMap map[interface{}]interface{}) (myStruct, error) {
errs := make([]error, 6)
s := myStruct{}
s.Name, errs[0] = getString(yamlMap, "name", true)
s.Tag, errs[1] = getIntValidRange(yamlMap, "tag", 1, 4094, true)
s.TaggedPorts, errs[2] = getStringPortList(yamlMap, "tagged_ports", true)
s.UntaggedPorts, errs[3] = getStringPortList(yamlMap, "untagged_ports", true)
s.IP, errs[4] = getIPString(yamlMap, "ip", true)
s.Netmask, errs[5] = getIPString(yamlMap, "netmask", true)
return s, structCreateErrorChecker(errs)
}
我不在每个函数之后处理每个错误的原因是因为我想先尝试解析所有内容,然后收集所有错误并记录它们。这就是 structCreateErrorChecker() 所做的。
这是我试图解析的 YAML(它出现在评论中)。当我说动态时,我的意思是可以有任意数量的这些 controlling_bridge 部分,每个 vlan 部分可以有任意数量的 vlan。
controlling_bridge_1:
ip: "1.1.1.1"
ports: ["1","2"]
vlans:
vlan01:
name: "vlan1"
tag: 1001
ports: ["1"]
ip: "2.2.2.2"
vlan02:
name: "vlan02"
tag: 1002
ports: ["3", "4"]
ip: "3.3.3.1"
controlling_bridge_2:
ip: "1.1.1.1"
ports: ["1","2"]
vlans:
vlan01:
name: "vlan1"
tag: 1001
ports: ["1"]
ip: "2.2.2.2"
vlan02:
name: "vlan02"
tag: 1002
ports: ["3", "4"]
ip: "3.3.3.1"
翻翻过去那场雪
相关分类