# 02-methods - 方法定义 ## 知识点讲解 ### 方法定义 ```go // 值接收者 func (p Person) GetName() string { return p.Name } // 指针接收者 func (p *Person) SetName(name string) { p.Name = name } ``` ### 值接收者 vs 指针接收者 ```go type Counter struct { value int } func (c Counter) GetValue() int { return c.value // 只读,不修改原值 } func (c *Counter) Increment() { c.value++ // 值读写,修改原值 } ``` ### 方法选择 | 场景 | 接收者类型 | |------|-----------| | 方法不需要修改接收者 | 值接收者 | | 方法需要修改接收者 | 指针接收者 | | 接收者较大,避免拷贝 | 指针接收者 | | 保持接口兼容性 | 值接收者 | ### 方法表达式与值 ```go c := Counter{value: 10} // 方法调用 c.Increment() // 方法表达式 f := (*Counter).Increment f(&c) ``` ### 重要提示 - 值接收者可以用于指针类型,反之则需要Go自动转换 - 方法集规则影响接口实现 - 选择接收者类型要考虑一致性 ## 学习目标 完成本练习后,你将: - ✅ 掌握方法的定义方式 - ✅ 理解值接收者和指针接收者的区别 - ✅ 学会为结构体定义方法 - ✅ 掌握方法的选择原则 ## 练习说明 打开 `main.go`,根据注释提示填充代码,完成后运行 `go test -v` 验证答案。