Go 方法是一等函数吗?

G41*_*143 0 methods go

标题基本上说明了一切..

我可以创建一个在运行时返回另一个 Go 方法的 Go 方法吗?一个简单的例子:

type Person struct {
    name string
    age uint
}

func (p Person) createGetNameMethod() /*return signature is a method for Person*/ {
    return /*return a new anonymous method here for Person*/
}
Run Code Online (Sandbox Code Playgroud)

Vol*_*ker 6

Go 方法是一等函数吗?

是的,他们是。

我可以创建一个返回另一个 Golang 方法的 Golang 方法 [...]?

是的当然。

[我可以]返回一个新的匿名方法[吗?]

不,当然不。

方法集是在编译时确定的。方法普通的一流函数,但它们不能在运行时更改或创建:

  • 您可以返回方法集中存在的方法,但不能向方法集中添加方法。

  • 反射允许类似的事情,但在你的情况下不允许。

  • @g4143,请注意,您_可以_做的是返回一个匿名函数,该函数关闭方法接收者“p”的“name”字段,它是在其中创建的。但请注意一些警告:1)在您的特定情况下`p` 的内容是存储在您调用方法的 `Person` 类型变量中的值的副本;因此,如果您要从该方法返回一个闭包,我会关闭变量“p”的字段,而不是原始变量;2)生成的代码会非常复杂;在审查过程中,我会问实际实现的目标是什么;-) (2认同)