函数做参数,bradfitz/gomemcache源码中一个问题

https://github.com/bradfitz/gomemcache/blob/master/memcache/memcache.go
在gomemcache的源码memcache.go 中,有个函数定义如下
源代码280行,onItem的第二个参数是一个函数,可以看到是有3个参数的

func (c *Client) onItem(item *Item, fn func(*Client, *bufio.ReadWriter, *Item) error) error {//实现省略}

然后后面的调用情况如下
以源代码498行Set为例子

func (c *Client) Set(item *Item) error {
    return c.onItem(item, (*Client).set)
}
func (c *Client) set(rw *bufio.ReadWriter, item *Item) error {}

发现Set中调用onItem的时候,传入的参数是set,set的定义就在下方,只有两个参数。
但是从之前onItem的定义中发现作为参数的函数应该是要有3个参数的,为什么这里传这个函数也可以?

共 2 个回复


leedstyh

func (c *Client) set(rw *bufio.ReadWriter, item *Item) error {}

是3个参数,c是第一个

# 0

leronpror

type A struc{
}
func (this *A)test(v int){
}
func main(){
    a:=&A{}
    a.test(9)
    (*A).test(a,9)
}

a.test(9)和(*A).test(a,9)是一样的操作,所有你的问题就解决了

# 1