En Go para decir que una clase implementa a una interfaz no es necesario hacerlo de manera explicita como otro lenguajes como c#, Java, etc. En go, se hace de manera implícita. es decir, solo necesita cumplir com las firmas que están en la interfaz.
package main
import "fmt"
func main(){
figuras := make([]Area, 0)
figuras = append(figuras, &Cuadrado{lado:4})
figuras = append(figuras, &Rectangulo{lado:4, base: 6})
figuras = append(figuras, &Triangulo{base:4, altura:10})
// Calcular areas
for _, f := range figuras {
fmt.Println(f.CalcularArea())
}
}
type Area interface {
CalcularArea() int
}
// Cuadrado implementa Area de manera implicita
type Cuadrado struct {
lado int
}
func (c *Cuadrado) CalcularArea() int {
return c.lado * c.lado
}
// Rectangulo implementa Area de manera implicita
type Rectangulo struct {
lado, base int
}
func (r *Rectangulo) CalcularArea() int {
return r.lado * r.base
}
// Triangulo implementa Area de manera implicita
type Triangulo struct {
base, altura int
}
func (t *Triangulo) CalcularArea() int {
return (t.base * t.altura)/2
}
Como verán no se le coloca en ningún lugar que la clase X implementa la interfaz Y de manera explicita.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?