为了账号安全,请及时绑定邮箱和手机立即绑定

遍历go中的所有接口方法

遍历go中的所有接口方法

Go
慕莱坞森 2022-10-10 16:48:21
如何对 xml 文件运行一套检查?每个检查都是一个返回 2 个字符串的方法:它的名称和通过或失败。使用 xml 查询。我尝试将所有方法放在一个接口中,但不知道如何迭代。在此代码示例中,尝试使注释“WANT”起作用:package mainimport (        "fmt"        "github.com/antchfx/xmlquery")type node xmlquery.Nodetype 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 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

这是一个示例,说明如何使用reflect. 仅更改了 XmlVerify 中的值以使示例更容易一些。还要确保方法名称已导出(大写)。


package main


import (

    "fmt"

    "reflect"

)


type XmlVerify struct {

    value string

}


func (xver XmlVerify) CheckUTC() (string, bool) {

    return "cUTC", xver.value == "one"

}


func (xver XmlVerify) CheckSugPresDel() (string, bool) {

    return "cSugPresDel", xver.value == "two"

}


func (xver XmlVerify) CheckStartNum() (string, bool) {

    return "cStartNum", xver.value == "three"

}


func verify(xmlverify XmlVerify) {

    t := reflect.TypeOf(xmlverify)


    for i := 0; i < t.NumMethod(); i++ {

        method := t.Method(i)

        ret := reflect.ValueOf(xmlverify).MethodByName(method.Name).Call(nil)

        fmt.Printf("%s checks passed: %t\n", ret[0], ret[1])

    }

}


func main() {

    v := XmlVerify{"two"}

    verify(v)

}

输出:


cStartNum checks passed: false

cSugPresDel checks passed: true

cUTC checks passed: false


查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号