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.Powerouc.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
- Incorporação de structs
- Incorporação de interfaces
- Promoção de métodos
- Composição em vez de herança