方法声明与接收者
方法声明
概念
- method: 带 receiver 的函数;
- receiver 类型: 当前包内定义的类型或其指针;
语法格式
type User struct {
Name string
}
// User 为 receiver 类型;Greet 为 User 的方法
func (u User) Greet() string {
return "hello " + u.Name
}
值接收者
概念
- value receiver: 调用时复制 receiver 值;
- 使用场景: 小值类型、不可变语义;
语法格式
func (u User) RenameCopy(name string) {
u.Name = name // 修改 receiver 副本,不改变原 User
println(u.Greet()) // hello Bob
}
func main() {
user := User{Name: "Alice"}
user.RenameCopy("Bob")
println(user.Greet()) // hello Alice
}
指针接收者
概念
- pointer receiver: 接收指向原值的指针;
- 使用场景: 需要修改 receiver、大对象避免复制、保持方法集合一致;
语法格式
func (u *User) Rename(name string) {
u.Name = name // 通过指针修改原 User
}
func main() {
u := User{Name: "Tom"}
u.Rename("Jerry") // 可寻址值调用指针接收者方法时,编译器可自动取地址
println(u.Greet()) // hello Jerry
}