将结构实例上的方法作为参数传递

passing a method on an instance of a struct as a parameter

我有一个接受函数作为参数的函数:

func send(n int, c func(x int) int) int {
    return c(n)
}

我有一个结构,上面定义了一个方法

type data struct {
    value int
}

func (t *data) set(x int) {
    t.value = x
}

我想创建一个结构实例,并将绑定到该实例的方法 set 作为第二个参数传递给 send 函数,以设置 value 字段send.

这可能吗?

https://play.golang.org/p/bv1JevQBcq

您可以使用 method value。这是与您的示例类似的内容:

package main

import "fmt"

func send(n int, c func(x int)) {
    c(n)
}

type data struct {
    value int
}

func (t *data) set(x int) {
    t.value = x
}

func main() {
    d := data{1}
    fmt.Println(d)
    send(2, d.set)
    fmt.Println(d)
}

playground example

我无法使用问题中的类型,因为函数参数发送 returns 一个值,而方法没有。如果您确实需要使用问题中的类型,则使用匿名函数使方法适应函数参数类型:

 send(2, func(v int) int { d.set(v); return 0 })