首页 > 文章列表 > 方法接收器上的golang函数别名

方法接收器上的golang函数别名

golang
391 2023-03-08

问题内容

我可以为常用方法创建方法别名:

func method1() {
    fmt.Println("method1")
}

var Method1 = method1

但不能对方法接收器做同样的事情:

type Person struct {
    Name string
}

func (p *Person) methodReciver() {
    fmt.Println("method reciver")
}

var MethodReciver = methodReciver

在这种情况下,我在线收到错误var MethodReciver = methodReciver

undefined: methodReciver

完整代码:

package main

import (
    "fmt"
)

type Person struct {
    Name string
}

func method1() {
    fmt.Println("method1")
}

var Method1 = method1

func (p *Person) methodReceiver() {
    fmt.Println("method receiver")
}

var MethodReceiver = methodReceiver

func main() {
    method1()
    Method1()
    p := Person{"Nick"}
    p.methodReceiver()
    p.MethodReceiver()
}

操场

是否可以为其创建方法别名methodReceiver

正确答案

是的。您可以像这样创建别名:

var MethodReceiver = (*Person).methodReceiver

当你调用它时,你必须提供一个指向 person 对象的指针作为第一个参数:

MethodReceiver(&p)

您可以在 Go Playground 上看到这一点