Go中的方法地图
我有几种方法,我打电话给一些情况下(如添加,删除等..)。然而,随着时间的推移,案件数量在不断增加,我的案例越来越多。所以我想我会创建一个方法图,如Go map of functions;这里函数的映射是微不足道的。但是,是否可以在Go中创建方法的地图?Go中的方法地图
当我们有一个方法:
func (f *Foo) Add(a string, b int) { }
的语法如下创建编译时错误:
actions := map[string]func(a, b){
"add": f.Add(a,b),
}
是否有可能创造地图中去的方法呢?
是的。目前:
actions := map[string]func(a string, b int){
"add": func(a string, b int) { f.Add(a, b) },
}
后来:看到提到的go11func文档guelfi。
太棒了!我真的很喜欢这个(创建一个调用方法的func)。非常感谢你。顺便说一句,我这样调用:'actions [“add](a,b)'。 – 2013-02-26 14:05:20
它应该是'actions [”add“](a,b)' – 2013-02-26 22:18:40
目前没有办法将接收器和方法都存储在单个值中(除非将其存储在结构中)。目前正在开发中,它可能会随着Go 1.1而改变(请参阅http://golang.org/s/go11func)。
你可以,但是,分配方法将一个函数值(不带接收器)和接收器传递到后面的值:
package main
import "fmt"
type Foo struct {
n int
}
func (f *Foo) Bar(m int) int {
return f.n + m
}
func main() {
foo := &Foo{2}
f := (*Foo).Bar
fmt.Printf("%T\n", f)
fmt.Println(f(foo, 42))
}
这个值可以存储在地图任何事情一样。
因为'func(f * Foo)Bar(m int)'与'func Bar(f * Foo,m int)'相同,所以这个方法可行。 – harm 2013-02-26 13:39:23
你想只存储函数还是函数和特定的接收器? – 2013-02-26 13:16:22
没有接收器的方法基本上是无用的,因此我想我绝对需要接收器。否则,我该如何调用f.add(a,b)? – 2013-02-26 13:19:52
那么,你可以在使用地图时动态地传递接收器,如http://stackoverflow.com/questions/8103617/call-a-struct-and-its-method-by-name-in-go – 2013-02-26 13:20:21