Value receiver vs. pointer receiver: ¿cuándo usar qué en Go?
¡Hola a todos! Acabo de empezar a aprender Go y no puedo entender los receivers en los métodos. Parece que entiendo la diferencia entre value receiver y pointer receiver, pero en la práctica siempre dudo qué elegir.
Por ejemplo, tengo una estructura:
```go
type User struct {
Name string
Age int
}
```
Y quiero escribir un método que incremente la edad del usuario. ¿Entiendo correctamente que aquí se necesita un pointer receiver?
```go
func (u *User) Birthday() {
u.Age++
}
```
¿Y si solo quiero mostrar información del usuario, puedo usar un value receiver?
```go
func (u User) PrintInfo() {
fmt.Printf("Name: %s, Age: %d\n", u.Name, u.Age)
}
```
Pero lo que me confunde es que leí en algún lugar que si la estructura es grande, el value receiver puede ser ineficiente debido a la copia. ¿Y qué se considera una estructura "grande"? Además, ¿la elección del receiver afecta de alguna manera a las interfaces?
¿Pueden darme reglas claras sobre cuándo usar value receiver y cuándo pointer receiver?