【发布时间】:2021-12-12 01:40:45
【问题描述】:
如何对 xml 文件运行一套检查?每一次检查都是一种方法 返回 2 个字符串:它的名称和通过或失败。 使用 xml 查询。我尝试将所有方法放在一个接口中,但是 不知道如何迭代。
在此代码示例中,尝试让评论“WANT”起作用:
package main
import (
"fmt"
"github.com/antchfx/xmlquery"
)
type node xmlquery.Node
type XmlChecks interface {
checkUTC() (string, string)
checkSugPresDel() (string, string)
checkStartNum() (string, string)
// ... there will be many
}
type XmlVerify struct {
doc node
}
func (xver XmlVerify) checkUTC() (string, string) {
//TBD
return "cUTC", "pass"
}
func (xver XmlVerify) checkSugPresDel() (string, string) {
//TBD
return "cSugPresDel", "pass"
}
func (xver XmlVerify) checkStartNum() (string, string) {
//TBD
return "cStartNum", "pass"
}
func main() {
var vrfy XmlVerify
vrfy.doc, _ := xmlquery.Parse("myfile.xml")
for each_method := range "all the methods in vrfy.XmlChecks" { //<--WANT
fmt.Printf("%s %s\n", vrfy.each_method()) //<--WANT
}
}
【问题讨论】:
-
一个接口只是定义了一个值可以实现的方法集。由于方法必须已经在代码中静态定义,您只需根据需要调用这些方法,您无需“迭代”任何内容。
-
你是说如果我有 1 或 200 个方法,那么在主函数中我需要单独调用它们中的每一个,对吗?因为我“不需要“迭代”任何东西”
-
这么多方法是非常不寻常的,但如果你有这么多方法,我认为它们是以某种方式生成的,调用站点也可以生成?如果你想列出一个类型的方法,你当然可以使用
reflect -
好建议。谢谢
标签: loops go interface iterator