Punteros vs valores: ¿cuándo usar * y & en parámetros y valores de retorno en Go?
Acabo de empezar a aprender Go y constantemente me confundo sobre cuándo pasar un puntero y cuándo un valor. Parece que he leído un montón de artículos, pero en la práctica sigo haciéndolo mal.
Por ejemplo, tengo una estructura User y una función que la actualiza:
```go
type User struct {
Name string
Age int
Score float64
}
func UpdateScore(u User, newScore float64) {
u.Score = newScore
}
```
Cuando llamo a `UpdateScore(myUser, 95.5)`, después de la llamada `myUser.Score` sigue siendo el mismo. Entendí que esto es porque Go copia la estructura. Entonces cambio a `*User`:
```go
func UpdateScore(u *User, newScore float64) {
u.Score = newScore
}
```
Ahora funciona. Pero cuando escribo una función que devuelve un nuevo usuario, veo dos opciones:
```go
func NewUser(name string, age int) User { ... }
func NewUserPtr(name string, age int) *User { ... }
```
¿Cuál de ellas es correcta? Y además: ¿qué hacer con estructuras grandes? ¿Escribir punteros en todas partes? ¿Y qué pasa con los tipos básic
No answers yet.
Inicia sesión para dejar una respuesta