Structs Incorporadas
Parte da seção Fundamentos do Journey de GO da Coddy — lição 99 de 109.
Go permite que você incorpore uma struct dentro de outra, criando relações de composição. Esta é a abordagem do Go para herança.
Defina duas structs, com uma embutida na outra:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // embedded struct (no field name)
}
func main() {
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
// Access fields directly
fmt.Println(person.city) // Access embedded field
}
A saída mostra que podemos acessar os campos da struct incorporada diretamente:
PortlandDesafio
InicianteNeste desafio, você praticará o uso de structs incorporadas (composição) em Go.
Temos duas structs: Address e Person. A struct Person deve incorporar a struct Address para que uma pessoa possa acessar diretamente os campos de endereço.
Sua tarefa é completar a definição da struct Person para incorporar a struct Address e, em seguida, acessar os campos de endereço diretamente da instância da pessoa.
Folha de consulta
Go usa incorporação de structs para composição. Incorpore uma struct dentro de outra incluindo o tipo da struct sem um nome de campo:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // struct incorporada (sem nome de campo)
}
Acesse os campos da struct incorporada diretamente:
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
fmt.Println(person.city) // Acesse o campo incorporado diretamente
Experimente você mesmo
package main
import "fmt"
// A struct Address contém informações de localização
type Address struct {
Street string
City string
ZipCode string
}
// A struct Person deve incorporar a struct Address
type Person struct {
Name string
Age int
// TODO: Incorpore a struct Address aqui (apenas uma linha)
}
func main() {
// Cria uma nova pessoa com informações de endereço
person := Person{
Name: "Alice",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Wonderland",
ZipCode: "12345",
},
}
// Imprime as informações da pessoa, incluindo o endereço
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// TODO: Imprima os campos de endereço diretamente da instância person
// (sem usar person.Address.Street, etc.)
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores de Comparação e Lógicos
Operadores de Comparação - Parte 1Operadores de Comparação - Parte 2Operador Lógico ANDOperador Lógico OROperador Lógico NOTFundamentos de Precedência de OperadoresRecapitulação - Fazendo Comparações7Fluxo de Controle: Loops
O Loop `for` ExplicadoLoop For - BásicoLoop For - Apenas CondiçãoA Palavra-chave `break`A Palavra-chave `continue`Loops AninhadosRecapitulação - Repetindo Ações2Variáveis e Tipos de Dados Básicos
O que é uma variávelInferência de Tipo com `:=`Inteiros (int)Números de Ponto FlutuanteBooleanosStringsValores ZeroConstantesConvenções de NomenclaturaRecapitulação - Variáveis e Tipos5Entrada/Saída Básica
Saída FormatadaVerbos de FormataçãoImprimindo TiposObtendo Entrada Básica do UsuárioRecapitulação - Entrada e Saída8Funções
Entendendo FunçõesDeclarando uma FunçãoChamando FunçõesParâmetros de FunçãoRetornando um Único ValorRetornando Múltiplos ValoresValores de Retorno NomeadosFundamentos de Escopo de FunçãoRecapitulação - Criando Código Reutilizável3Operadores Básicos
Operadores AritméticosOperador de DivisãoO Operador MóduloOperador de AtribuiçãoOperadores de Atribuição CompostaIncremento e DecrementoRecapitulação - Cálculos6Fluxo de Controle: Condicionais
A Instrução `if`A Palavra-chave `else`A Palavra-chave `else if`Sombreamento de Variáveis no `if`Inicializando VariáveisA Instrução `switch`Switch com ExpressõesSwitch sem ExpressãoA Palavra-chave `fallthrough`Recapitulação - Tomando Decisões