Go 如何在结构上调用变量方法
我想在结构上调用一个变量方法,就像这个例子一样Go 如何在结构上调用变量方法,go,Go,我想在结构上调用一个变量方法,就像这个例子一样 type controller struct{} func (c *controller) Index() { fmt.Println("index controller") } func invokeIt(action string) { (&controller{}).action // don't work duh (&controller{})["action"] // this is Go n
type controller struct{}
func (c *controller) Index() {
fmt.Println("index controller")
}
func invokeIt(action string) {
(&controller{}).action // don't work duh
(&controller{})["action"] // this is Go not js
// how can I invoke it?
}
谢谢回复。DHH,您正在移植Rails吗:) 撇开玩笑不谈,这正是我们的目的。例如:
type Foo struct{}
func (Foo) FooM() { fmt.Println("Foom") }
func main() {
foo := Foo{}
reflect.ValueOf(foo).MethodByName("FooM").Call(nil)
}
游乐场:
编辑:更惯用的方法是使用接口(正如其他人所建议的,但后来删除了他们的答案)。所以,如果你想,比如说,定义一些可以做CRUD的东西,在围棋中,你通常会选择
type Resources interface {
Index()
New()
Show(id int)
// ...
}
可能是一个
Invoke
方法,以便使用上面的reflect
调用非标准方法reflect
功能非常强大,也是一种射中自己脚的好方法,因此过度使用它绝对不是一个好主意。DHH,您是否正在移植Rails:)
撇开玩笑不谈,这正是我们的目的。例如:
type Foo struct{}
func (Foo) FooM() { fmt.Println("Foom") }
func main() {
foo := Foo{}
reflect.ValueOf(foo).MethodByName("FooM").Call(nil)
}
游乐场:
编辑:更惯用的方法是使用接口(正如其他人所建议的,但后来删除了他们的答案)。所以,如果你想,比如说,定义一些可以做CRUD的东西,在围棋中,你通常会选择
type Resources interface {
Index()
New()
Show(id int)
// ...
}
可能是一个
Invoke
方法,以便使用上面的reflect
调用非标准方法reflect
功能非常强大,也是一种很好的攻击自己的方法,因此过度使用它绝对不是一个好主意。@chendesheng是的,您的代码似乎与OP想要的完全一样。是否还有一种方法可以从包中实例化变量。like controller:=var[“controller”]。c:=controllers[“controller”]?@chendesheng是的,您的代码似乎与OP想要的完全一样。是否有一种方法可以从包中实例化变量。like controller:=var[“controller”]。c:=控制器[“控制器”]?