Golang带有接收器的功能图

时间:2017-08-03 00:06:33

标签: go

无论如何要制作一个函数指针的映射,但是接受接收器的函数呢?我知道如何使用常规函数:

package main

func someFunc(x int) int {
    return x
}

func main() {
    m := make(map[string]func(int)int, 0)
    m["1"] = someFunc
    print(m["1"](56))
}

但是你可以用接收器的功能吗?这样的事情(虽然我已经尝试过这个并且它不起作用):

package main

type someStruct struct {
    x int
}

func (s someStruct) someFunc() int {
    return s.x
}

func main() {
    m := make(map[string](someStruct)func()int, 0)
    s := someStruct{56}
    m["1"] = someFunc
    print(s.m["1"]())
}

一个显而易见的解决方法是将结构作为参数传递,但这比我想要的更脏一点

1 个答案:

答案 0 :(得分:4)

您可以使用方法表达式执行此操作:

https://golang.org/ref/spec#Method_expressions

调用有点不同,因为方法表达式将接收器作为第一个参数。

此处修改了您的示例:

A()
B()
~A()

这是一个Go游乐场供你测试:

https://play.golang.org/p/PLi5A9of-U