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

时间:2015-01-24 00:19:34

标签: go

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

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字段1}}。

这可能吗?

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

1 个答案:

答案 0 :(得分:1)

您可以使用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

我无法使用问题中的类型,因为send函数参数返回值而方法没有。如果确实需要使用问题中的类型,则使用匿名函数使方法适应函数参数类型:

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