如何在Golang中确定接口的方法集?

时间:2016-08-05 22:33:57

标签: go interface

如何打印以下界面的方法集?

type Searcher interface {
    Search(query string) (found bool, err error)
    ListSearches() []string
    ClearSearches() (err error)
}

这样

Search
ListSearches
ClearSearches
打印出来了吗? (没有实现它的具体类型的知识)。

2 个答案:

答案 0 :(得分:1)

reflect包是这个的正确工具。使用反射可以获得变量的类型信息,而无需事先知道类型。这是一个代码片段,展示了如何获取接口所需定义的函数的函数名称

package main

import (
    "fmt"
    "reflect"
)

type Searcher interface {
    Search(query string) (found bool, err error)
    ListSearches() []string
    ClearSearches() (err error)
}

func main() {
    t := reflect.TypeOf(struct{ Searcher }{})
    for i := 0; i < t.NumMethod(); i++ {
        fmt.Println(t.Method(i).Name)
    }
}

检查golangplayground

答案 1 :(得分:0)

使用反射:

t := reflect.TypeOf(new(Searcher)).Elem()
fmt.Println(t)

for i := 0; i < t.NumMethod(); i++ {
    fmt.Println(t.Method(i).Name)
}

打印:

main.Searcher
ClearSearches
ListSearches
Search