Files
2026-03-14 19:03:12 +08:00
..
2026-03-14 19:03:12 +08:00
2026-03-14 19:03:12 +08:00
2026-03-14 19:03:12 +08:00

02-methods - 方法定义

知识点讲解

方法定义

// 值接收者
func (p Person) GetName() string {
    return p.Name
}

// 指针接收者
func (p *Person) SetName(name string) {
    p.Name = name
}

值接收者 vs 指针接收者

type Counter struct {
    value int
}

func (c Counter) GetValue() int {
    return c.value  // 只读,不修改原值
}

func (c *Counter) Increment() {
    c.value++  // 值读写,修改原值
}

方法选择

场景 接收者类型
方法不需要修改接收者 值接收者
方法需要修改接收者 指针接收者
接收者较大,避免拷贝 指针接收者
保持接口兼容性 值接收者

方法表达式与值

c := Counter{value: 10}

// 方法调用
c.Increment()

// 方法表达式
f := (*Counter).Increment
f(&c)

重要提示

  • 值接收者可以用于指针类型,反之则需要Go自动转换
  • 方法集规则影响接口实现
  • 选择接收者类型要考虑一致性

学习目标

完成本练习后,你将:

  • ✅ 掌握方法的定义方式
  • ✅ 理解值接收者和指针接收者的区别
  • ✅ 学会为结构体定义方法
  • ✅ 掌握方法的选择原则

练习说明

打开 main.go,根据注释提示填充代码,完成后运行 go test -v 验证答案。