0Pricing
Go Academy · Aula

Promoção de métodos

Herde métodos por incorporação

Promoção de métodos é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 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.

Herdando métodos por incorporação

Quando você incorpora um tipo, seus métodos também são promovidos. O tipo externo pode chamá-los como se os tivesse definido — a forma de herança do Go.

Um método promovido

Car incorpora Engine e obtém gratuitamente seu método Start.

package main

import "fmt"

type Engine struct{}

func (Engine) Start() { fmt.Println("engine started") }

type Car struct{ Engine }

func main() {
	c := Car{}
	c.Start()
}

Métodos operam sobre o valor incorporado

Um método promovido é executado sobre o campo incorporado, não sobre a estrutura externa. Ele não consegue acessar os outros campos da estrutura externa.

package main

import "fmt"

type Counter struct{ n int }

func (c *Counter) Inc() { c.n++ }
func (c Counter) Get() int { return c.n }

type Widget struct{ Counter }

func main() {
	w := Widget{}
	w.Inc()
	w.Inc()
	fmt.Println(w.Get())
}

Substituindo um método

Defina um método com o mesmo nome na estrutura externa para substituir o método promovido. O método externo tem precedência.

package main

import "fmt"

type Animal struct{}

func (Animal) Speak() string { return "..." }

type Dog struct{ Animal }

func (Dog) Speak() string { return "Woof" }

func main() {
	fmt.Println(Dog{}.Speak())
}

Chamando a versão incorporada

Mesmo depois da substituição, você ainda pode acessar o método original por meio do nome do tipo incorporado.

package main

import "fmt"

type Animal struct{}

func (Animal) Speak() string { return "generic" }

type Dog struct{ Animal }

func (d Dog) Speak() string { return "Woof + " + d.Animal.Speak() }

func main() {
	fmt.Println(Dog{}.Speak())
}

Promoção e interfaces

Como os métodos promovidos fazem parte do conjunto de métodos do tipo externo, esse tipo pode satisfazer interfaces usando os métodos do tipo incorporado.

package main

import "fmt"

type Stringer interface{ String() string }
type Base struct{ name string }

func (b Base) String() string { return b.name }

type Wrapper struct{ Base }

func main() {
	var s Stringer = Wrapper{Base{"hi"}}
	fmt.Println(s.String())
}

Conjuntos de métodos de ponteiro versus valor

Se o tipo incorporado tiver métodos com receptor de ponteiro, somente um ponteiro para a estrutura externa (ou um valor endereçável) terá esses métodos promovidos para seu conjunto de métodos.

Incorporação para comportamento padrão

Incorpore um tipo que forneça métodos padrão sensatos e substitua apenas os poucos de que precisa para personalizar — um poderoso padrão de reutilização.

package main

import "fmt"

type DefaultHandler struct{}

func (DefaultHandler) Handle() string { return "default" }

type CustomHandler struct{ DefaultHandler }

func (CustomHandler) Handle() string { return "custom" }

func main() {
	fmt.Println(CustomHandler{}.Handle())
}

Sem polimorfismo verdadeiro

Ao contrário da OOP clássica, o método incorporado não redireciona a chamada para a substituição externa. Go não possui despacho virtual de métodos por meio da incorporação.

Promoção por vários níveis

Os métodos são promovidos de forma transitiva: se A incorpora B e B incorpora C, A também obtém os métodos de C, desde que não haja ambiguidade.

Quando a promoção ajuda

  • Reutilizar comportamentos sem reescrevê-los
  • Fornecer padrões que você pode substituir
  • Satisfazer interfaces por meio de métodos incorporados

Verificação rápida

Teste seus conhecimentos sobre promoção de métodos.

Recapitulação

Você aprendeu a promoção de métodos.

  • Métodos incorporados são promovidos para o tipo externo
  • Métodos externos substituem os métodos promovidos
  • Acesse o método original por meio do nome do tipo incorporado
  • A promoção ajuda a satisfazer interfaces, mas não existe despacho virtual

Perguntas Frequentes

A aula “Promoção de métodos” é grátis?

Sim — o texto completo de “Promoção de métodos” é 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 “Promoção de métodos”?

Herde métodos por incorporação 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 3 de 4.

Quanto tempo leva a aula “Promoção de métodos”?

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