值类型和指针类型接收者
1. 对原变量的修改能力
type User struct{ Name string } func (u User) UpdateName(name string) { u.Name = name // 修改副本,原User.Name不变 }func (u *User) UpdateName(name string) { u.Name = name // 修改原User.Name }
2. 接口实现的规则
type Speaker interface { Speak() } type Dog struct{} // 值接收者实现接口 func (d Dog) Speak() {} var d Dog var pd *Dog = &d var s Speaker = d // ✅ 合法 var s2 Speaker = pd // ✅ 合法(自动解引用)func (d *Dog) Speak() {} // 指针接收者 var d Dog var pd *Dog = &d var s Speaker = d // ❌ 编译错误 var s2 Speaker = pd // ✅ 合法
3. 性能与复制开销
4. 方法调用规则
5. 方法集(Method Sets)规则
最佳实践
示例对比
总结
最后更新于