亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷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 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號