Ponteiros vs Valores: quando usar * e & em parâmetros e valores de retorno em Go?
Acabei de começar a aprender Go e fico constantemente confuso sobre quando passar um ponteiro e quando passar um valor. Li vários artigos, mas na prática ainda faço errado.
Por exemplo, tenho uma struct User e uma função que a atualiza:
```go
type User struct {
Name string
Age int
Score float64
}
func UpdateScore(u User, newScore float64) {
u.Score = newScore
}
```
Quando chamo `UpdateScore(myUser, 95.5)`, após a chamada `myUser.Score` permanece o mesmo. Entendi que isso acontece porque Go copia a struct. Então mudo para `*User`:
```go
func UpdateScore(u *User, newScore float64) {
u.Score = newScore
}
```
Agora funciona. Mas quando escrevo uma função que retorna um novo usuário, vejo duas opções:
```go
func NewUser(name string, age int) User { ... }
func NewUserPtr(name string, age int) *User { ... }
```
Qual delas é a correta? E mais: como lidar com structs grandes? Devo usar ponteiros em tudo? E quanto aos tipos básicos?
No answers yet.
Faça login para deixar uma resposta