Como iterar sobre todos os campos de uma struct em Go? (iteração pelos campos de struct)
Olá a todos! Comecei a estudar Go recentemente e me deparei com um problema: tenho uma struct com vários campos e preciso iterar programaticamente sobre todos os seus campos, por exemplo, para exibir seus valores ou serializá-los em um map.
Aqui está um exemplo da minha struct:
```go
type User struct {
Name string
Age int
Email string
}
```
Quero escrever uma função que receba `User` e exiba todos os campos no formato `chave: valor`. Tentei usar um loop comum, mas Go não permite iterar sobre campos de struct como se fosse um array ou map.
```go
func PrintFields(u User) {
for _, field := range u { // Erro: cannot range over u (type User)
fmt.Println(field)
}
}
```
Entendo que em outras linguagens (como Python ou JavaScript) isso é feito facilmente com dicionários, mas em Go estou perdido. Alguém pode me dizer como iterar corretamente sobre os campos de uma struct? É necessário usar reflexão? Se sim, como fazer isso de forma segura e eficiente?
Agradeço desde já por um exemplo.