遍历go中的所有接口方法

如何对 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

        }


}


慕莱坞森
浏览 111回答 1
1回答

胡子哥哥

这是一个示例,说明如何使用reflect. 仅更改了 XmlVerify 中的值以使示例更容易一些。还要确保方法名称已导出(大写)。package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "reflect")type XmlVerify struct {&nbsp; &nbsp; value string}func (xver XmlVerify) CheckUTC() (string, bool) {&nbsp; &nbsp; return "cUTC", xver.value == "one"}func (xver XmlVerify) CheckSugPresDel() (string, bool) {&nbsp; &nbsp; return "cSugPresDel", xver.value == "two"}func (xver XmlVerify) CheckStartNum() (string, bool) {&nbsp; &nbsp; return "cStartNum", xver.value == "three"}func verify(xmlverify XmlVerify) {&nbsp; &nbsp; t := reflect.TypeOf(xmlverify)&nbsp; &nbsp; for i := 0; i < t.NumMethod(); i++ {&nbsp; &nbsp; &nbsp; &nbsp; method := t.Method(i)&nbsp; &nbsp; &nbsp; &nbsp; ret := reflect.ValueOf(xmlverify).MethodByName(method.Name).Call(nil)&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("%s checks passed: %t\n", ret[0], ret[1])&nbsp; &nbsp; }}func main() {&nbsp; &nbsp; v := XmlVerify{"two"}&nbsp; &nbsp; verify(v)}输出:cStartNum checks passed: falsecSugPresDel checks passed: truecUTC checks passed: false
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go