跳到主要内容

方法声明与接收者

方法声明

概念

  • 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
}