选择receiver参数类型的原则 官网
选择receiver参数类型有几个原则。若需修改对象状态,选指针类型。若对象大,用指针类型可避免复制开销。若方法无需修改对象且对象小,用值类型。 // 修改对象状态用指针类型package mainimport "fmt"type Account struct { Balance float64}func (a *Account) Deposit(amount float64) { a.Balance += amount} // 运行结果:账户余额增加func main() { a := &Account{Balance: 100.0} a.Deposit(50.0) fmt.Println(a.Balance)} 若无需修改对象: // 无需修改对象用值类型package mainimport "fmt"type Point struct { X int Y int}func (p Point) Distance() int { return p.X * p.X + p.Y * p.Y} // 运行结果:计算点到原点距离func main() { p := Point{X: 3, Y: 4} fmt.Println(p.Distance())} 要综合考虑对象大小、是否需修改状态来选合适类型。