0Pricing
Go Academy · Aula

Incorporação de structs

Componha structs

Incorporação de structs é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Componha estruturas

Go não possui herança de classes. Em vez disso, oferece incorporação: coloque uma estrutura dentro de outra sem um nome de campo para reutilizar seus campos e métodos.

Campos anônimos

Um campo incorporado é declarado apenas pelo tipo, sem nome. Seus membros são promovidos para a estrutura externa.

package main

import "fmt"

type Engine struct{ Power int }

type Car struct {
	Engine
	Brand string
}

func main() {
	c := Car{Engine: Engine{Power: 150}, Brand: "Coddy"}
	fmt.Println(c.Power, c.Brand)
}

Acessando campos promovidos

Você lê c.Power diretamente, embora Power pertença à Engine incorporada. Isso é a promoção de campos.

O caminho completo ainda funciona

Você sempre pode acessar explicitamente a estrutura incorporada por meio do nome do tipo.

package main

import "fmt"

type Engine struct{ Power int }
type Car struct{ Engine }

func main() {
	c := Car{Engine{200}}
	fmt.Println(c.Engine.Power)
	fmt.Println(c.Power)
}

Incorporação versus campo nomeado

Um campo nomeado (engine Engine) exige c.engine.Power. A incorporação (Engine) promove os membros, permitindo escrever c.Power. A incorporação expressa uma relação de um tipo de.

Inicializando estruturas incorporadas

Use o nome do tipo como chave do campo em um literal composto.

package main

import "fmt"

type Address struct{ City string }
type User struct {
	Address
	Name string
}

func main() {
	u := User{Address: Address{City: "Istanbul"}, Name: "Mert"}
	fmt.Println(u.Name, "in", u.City)
}

Múltiplas incorporações

Uma estrutura pode incorporar vários tipos, combinando seus campos.

package main

import "fmt"

type Timestamps struct{ Created string }
type Author struct{ Name string }
type Post struct {
	Timestamps
	Author
	Title string
}

func main() {
	p := Post{Timestamps{"today"}, Author{"Ada"}, "Hello"}
	fmt.Println(p.Title, p.Name, p.Created)
}

Colisões de nomes

Se dois tipos incorporados compartilham um nome de campo, a referência ambígua causa um erro de compilação — você deve qualificá-la com o nome do tipo para desambiguá-la.

Ocultação pela estrutura externa

Um campo declarado na estrutura externa oculta outro campo promovido com o mesmo nome. O campo externo prevalece no acesso não qualificado.

package main

import "fmt"

type Base struct{ ID int }
type Item struct {
	Base
	ID int
}

func main() {
	i := Item{Base{1}, 99}
	fmt.Println(i.ID, i.Base.ID)
}

Incorporação de ponteiros

Você pode incorporar um tipo de ponteiro. Os membros continuam sendo promovidos, mas é necessário inicializar o ponteiro para evitar uma desreferência nula.

package main

import "fmt"

type Logger struct{ Prefix string }
type Service struct{ *Logger }

func main() {
	s := Service{Logger: &Logger{Prefix: "[svc]"}}
	fmt.Println(s.Prefix)
}

Quando incorporar

  • Reutilizar campos comuns (marcas de tempo, identificadores)
  • Criar tipos mais completos a partir de tipos menores
  • Evitar aninhamento profundo e caminhos de acesso extensos

Verificação rápida

Teste seus conhecimentos sobre incorporação de estruturas.

Recapitulação

Você aprendeu a incorporação de estruturas.

  • Campos anônimos promovem membros para a estrutura externa
  • Acesse por meio de c.Power ou c.Engine.Power
  • Campos externos ocultam os campos promovidos
  • Colisões exigem qualificação explícita
  • A incorporação de ponteiros também funciona

Perguntas Frequentes

A aula “Incorporação de structs” é grátis?

Sim — o texto completo de “Incorporação de structs” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Incorporação de structs”?

Componha structs Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Incorporação de structs”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Incorporação de structs
  2. Incorporação de interfaces
  3. Promoção de métodos
  4. Composição em vez de herança
← Voltar para Go Academy