跳到主要内容

方法表达式与方法值

方法表达式

概念

  • method expression: 从类型选择方法并得到函数值;
  • receiver: 转换为所得函数的第一个参数;

语法格式

func main() {
fn := User.Greet // receiver 变成第一个参数
println(fn(User{Name: "Tom"}))
}

方法值

概念

  • method value: 从具体值选择方法并得到函数值;
  • receiver: 创建方法值时已绑定;

语法格式

func main() {
u := User{Name: "Tom"}
fn := u.Greet // receiver 已绑定到函数值
println(fn())
}

核心区别

形式选择起点receiver 的位置
方法表达式类型函数的第一个参数
方法值具体值已绑定在所得函数值中