Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何在结构上调用变量方法_Go - Fatal编程技术网

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:=控制器[“控制器”]?