Introdução
Este laboratório tem como objetivo testar seus conhecimentos sobre structs em Go, que são coleções tipadas de campos. Structs são úteis para agrupar dados e formar registros.
Structs (Estruturas)
Neste laboratório, você precisa completar a função newPerson que constrói uma nova struct (estrutura) person com o nome fornecido. O tipo de struct person possui os campos name (nome) e age (idade).
- O tipo de struct
persondeve ter os camposnameeage. - A função
newPersondeve construir uma nova structpersoncom o nome fornecido. - A função
newPersondeve retornar um ponteiro para a structpersonrecém-criada. - A função
maindeve imprimir o seguinte:- Uma nova struct com o nome "Bob" e idade 20.
- Uma nova struct com o nome "Alice" e idade 30.
- Uma nova struct com o nome "Fred" e idade 0.
- Um ponteiro para uma nova struct com o nome "Ann" e idade 40.
- Uma nova struct construída usando a função
newPersoncom o nome "Jon" e idade 42. - O campo nome de uma struct com o nome "Sean" e idade 50.
- O campo idade de um ponteiro para uma struct com o nome "Sean" e idade 50.
- O campo idade de um ponteiro para uma struct com o nome "Sean" e idade 50 após o campo idade ter sido atualizado para 51.
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
A seguir, o código completo:
// As _structs_ (estruturas) do Go são coleções tipadas de campos.
// Elas são úteis para agrupar dados e formar
// registros.
package main
import "fmt"
// Este tipo de struct `person` possui os campos `name` e `age`.
type person struct {
name string
age int
}
// `newPerson` constrói uma nova struct person com o nome fornecido.
func newPerson(name string) *person {
// Você pode retornar com segurança um ponteiro para uma variável local
// pois uma variável local sobreviverá ao escopo da função.
p := person{name: name}
p.age = 42
return &p
}
func main() {
// Esta sintaxe cria uma nova struct.
fmt.Println(person{"Bob", 20})
// Você pode nomear os campos ao inicializar uma struct.
fmt.Println(person{name: "Alice", age: 30})
// Campos omitidos terão o valor zero.
fmt.Println(person{name: "Fred"})
// Um prefixo `&` produz um ponteiro para a struct.
fmt.Println(&person{name: "Ann", age: 40})
// É idiomático encapsular a criação de novas structs em funções construtoras
fmt.Println(newPerson("Jon"))
// Acesse os campos da struct com um ponto.
s := person{name: "Sean", age: 50}
fmt.Println(s.name)
// Você também pode usar pontos com ponteiros de struct - os
// ponteiros são automaticamente desreferenciados.
sp := &s
fmt.Println(sp.age)
// Structs são mutáveis.
sp.age = 51
fmt.Println(sp.age)
}
Resumo
Neste laboratório, você aprendeu como usar structs em Go para agrupar dados e formar registros. Você também aprendeu como criar novas structs, acessar campos de struct e atualizar campos de struct.