Olá Murilo, tudo bem com você?
A alternativa A, diz que: "qualquer valor armazenado em uma struct, pode ser alterado." Essa afirmação está correta no sentido de que, em Go, é possível modificar os valores dos campos de uma struct, desde que você tenha acesso a uma instância modificável dessa struct. Porém, como você bem mencionou, há um ponto importante: se a struct for passada por cópia, as alterações não afetam a struct original, mas apenas a cópia. Isso não significa que os valores não podem ser alterados — eles podem ser modificados na cópia. Exemplo:
package main
import "fmt"
type Pessoa struct {
Nome string
Idade int
}
func alteraIdadePorCopia(p Pessoa) {
p.Idade = 30 // Modifica a cópia, mas não a original
fmt.Println("Dentro da função (cópia) - Idade alterada:", p.Idade) // Mostra a alteração na cópia
}
func alteraIdadePorReferencia(p *Pessoa) {
p.Idade = 30 // Modifica a struct original
fmt.Println("Dentro da função (referência) - Idade alterada:", p.Idade) // Mostra a alteração na original
}
func main() {
p1 := Pessoa{Nome: "João", Idade: 20}
fmt.Println("Antes de passar para a função (original) - Idade:", p1.Idade)
alteraIdadePorCopia(p1)
fmt.Println("Após a função (cópia) - Idade:", p1.Idade) // Continua sendo 20, pois foi passado por cópia
alteraIdadePorReferencia(&p1)
fmt.Println("Após a função (referência) - Idade:", p1.Idade) // Agora é 30, pois foi passado por referência
}
Neste exemplo temos que:
- Quando passamos a struct por cópia, as alterações não afetam a instância original.
- Quando passamos por referência (usando ponteiros), as alterações refletem na struct original.
Portanto, a alternativa A
está correta, pois os valores de uma struct podem ser alterados, mas é fundamental entender como a struct está sendo manipulada (cópia ou referência). Esse detalhe não invalida a afirmação, apenas adiciona contexto.
As alternativas B e C também estão corretas, como você já identificou. A alternativa D está incorreta porque afirma que uma struct é uma coleção de variáveis do mesmo tipo, o que não é verdade, já que uma struct pode conter campos de diferentes tipos, como mostro abaixo:
type Produto struct {
Nome string
Preco float64
EmEstoque bool
}
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado