方法表达式与方法值
方法表达式
概念
- 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 的位置 |
|---|---|---|
| 方法表达式 | 类型 | 函数的第一个参数 |
| 方法值 | 具体值 | 已绑定在所得函数值中 |