En Go, el embedding se refiere a la capacidad de incrustar un tipo en otro, de este modo conseguimos:
- Reutilización de código: El embedding es útil para compartir funcionalidades comunes entre tipos sin heredar explÃcitamente de una clase base.
- Composición: Permite la composición de tipos, lo que significa que un tipo puede incluir otros tipos y, por lo tanto, heredar sus comportamientos.
- Extensión de funcionalidad: Se utiliza para extender la funcionalidad de un tipo existente incorporando otros tipos que proporcionan funcionalidades adicionales.
- Simplicidad y claridad: Puede simplificar y hacer más claro el diseño de tipos al permitir una estructura más modular y fácil de entender.
Si eres nuevo en el mundo de Go te recomiendo los siguientes artÃculos anteriores:
En este sencillo ejemplo tenemos tres estructuras:
- person: Estructura común.
- student: Hereda de
person
y además añade el stringgrade
. - teacher: Hereda de
person
y además añade el intteaching_years
.
vi university.go
package main
import "fmt"
type person struct {
name string
age int
}
func (p person) introduction() {
fmt.Printf("Hello, I'm %s and I'm %d years old.\n", p.name, p.age)
}
type student struct {
person
grade string
}
func (s student) study() {
fmt.Printf("%s is studying in %s.\n", s.name, s.grade)
}
type teacher struct {
person
teaching_years int
}
func (t teacher) teaching() {
fmt.Printf("%s has been teaching %d years.\n", t.name, t.teaching_years)
}
func main() {
student := student{
person: person{
name: "Ana",
age: 20,
},
grade: "engineering",
}
teacher := teacher{
person: person{
name: "Joe",
age: 30,
},
teaching_years: 10,
}
student.introduction()
student.study()
fmt.Println("-----")
teacher.introduction()
teacher.teaching()
}
Ejecutamos el código:
go run university.go
Podemos ver como cada objeto comparte los campos definidos en la estructura person
(name/age) y además tienen los campos adicionales especÃficos(grade/teaching_years) respectivamente, además las estructuras person
, student
y teacher
tienen una función común introduction
y una función propia study
y teaching respectively
debido a los
Go methods
:
Hello, I'm Ana and I'm 20 years old.
Ana is studying in engineering.
-----
Hello, I'm Joe and I'm 30 years old.
Joe has been teaching 10 years.