Value receiver vs. pointer receiver: 什么时候在Go中使用哪个?
大家好!我刚开始学习Go,一直搞不清楚方法中的接收者(receivers)。我似乎理解了value receiver和pointer receiver的区别,但在实践中总是犹豫该选哪个。
例如,我有一个结构体:
```go
type User struct {
Name string
Age int
}
```
我想写一个增加用户年龄的方法。我理解得对吗,这里需要用pointer receiver?
```go
func (u *User) Birthday() {
u.Age++
}
```
而如果我只是想输出用户信息,可以用value receiver?
```go
func (u User) PrintInfo() {
fmt.Printf("Name: %s, Age: %d\n", u.Name, u.Age)
}
```
但让我困惑的是:我读到过,如果结构体很大,value receiver可能因为拷贝而效率低下。那什么算“大”的结构体?还有,选择receiver会影响接口吗?
你能给出明确的规则,告诉我什么时候用value re