0Pricing
Go Academy · Lección

Promoción de métodos

Herede métodos mediante inserción

Promoción de métodos es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Heredar métodos mediante incrustación

Cuando incrusta un tipo, sus métodos también se promocionan. El tipo externo puede llamarlos como si los hubiera definido, la variante de herencia de Go.

Un método promocionado

Car incrusta Engine y obtiene su método Start sin esfuerzo adicional.

package main

import "fmt"

type Engine struct{}

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

type Car struct{ Engine }

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

Los métodos operan sobre el valor incrustado

Un método promocionado se ejecuta sobre el campo incrustado, no sobre la estructura externa. No puede ver los demás campos de la estructura 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())
}

Sobrescribir un método

Defina un método con el mismo nombre en la estructura externa para sobrescribir el promocionado. El método externo tiene prioridad.

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())
}

Llamar a la versión incrustada

Incluso después de sobrescribirlo, puede acceder al método original mediante el nombre del tipo incrustado.

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())
}

Promoción e interfaces

Como los métodos promocionados forman parte del conjunto de métodos del tipo externo, este puede satisfacer interfaces mediante los métodos del tipo incrustado.

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 punteros y valores

Si el tipo incrustado tiene métodos con receptor por puntero, solo un puntero a la estructura externa (o un valor direccionable) obtiene esos métodos promocionados en su conjunto de métodos.

Incrustación para obtener un comportamiento predeterminado

Incruste un tipo que proporcione métodos predeterminados adecuados y sobrescriba solo los pocos que necesite personalizar: un potente patrón de reutilización.

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())
}

No hay polimorfismo real

A diferencia de la POO clásica, el método incrustado no vuelve a distribuir la llamada hacia la sobrescritura externa. Go no tiene despacho de métodos virtuales mediante incrustación.

Promoción a través de varios niveles

Los métodos se promocionan de forma transitiva: si A incrusta B y B incrusta C, A también obtiene los métodos de C, siempre que no haya ambigüedad.

Cuándo resulta útil la promoción

  • Reutilizar comportamiento sin reescribirlo
  • Proporcionar valores predeterminados que pueda sobrescribir
  • Satisfacer interfaces mediante métodos incrustados

Comprobación rápida

Compruebe sus conocimientos sobre la promoción de métodos.

Resumen

Ha aprendido la promoción de métodos.

  • Los métodos incrustados se promocionan al tipo externo
  • Los métodos externos sobrescriben los promocionados
  • Acceda al método original mediante el nombre del tipo incrustado
  • La promoción ayuda a satisfacer interfaces, pero no existe despacho virtual

Preguntas frecuentes

¿La lección «Promoción de métodos» es gratis?

Sí — el texto completo de «Promoción de métodos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Promoción de métodos»?

Herede métodos mediante inserción Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Promoción de métodos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Inserción de structs
  2. Inserción de interfaces
  3. Promoción de métodos
  4. Composición frente a herencia
← Volver a Go Academy