猿问

如何将接口方法传递给函数?

我有一个界面如下:


type visitable interface {

    getName() string

    getLookupMessage() string

}

我想制作一个带有类似签名的函数,apply(visitable []visitable, function ???)它接受可访问的函数(例如 getName 或 getLookupMessage)作为第二个参数。我可以在技术上做到这一点吗?如果是,如何?


慕妹3146593
浏览 168回答 1
1回答

呼如林

是的,在这种特定情况下,您可以使用方法表达式。这是有效的,因为两个接口方法具有相同的签名,即两者的类型visitable.getName和visitable.getLookupMessage是func(visitable) string:package maintype visitable interface {    getName() string    getLookupMessage() string}func apply(vs []visitable, m func(visitable) string) {    for _, v := range vs {        m(v)    }}func main() {    apply(nil, visitable.getName)    apply(nil, visitable.getLookupMessage)}然而,考虑到它是多么微不足道apply,目前还不清楚为什么这会有用,特别是考虑到这不适用于具有不同签名的方法。
随时随地看视频慕课网APP

相关分类

Go
我要回答