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.
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