Structs e interfaces
Go Interfaces
Describe behavior as a list of methods. Any type that has them satisfies the interface automatically.
Lo que aprenderás
- Defining an interface
- Implicit implementation
- any and type assertions
interface Shape
ShapeArea(), Name()CircleRect
Behavior, not inheritance
An interface lists methods. Any type that has those methods satisfies the interface automatically: there is no implements keyword. Code written against the interface works with every such type.
Circle and Rect both have Area and Name, so both can be stored in a []Shape and passed to describe. any is the interface with no methods, which every value satisfies. value.(Circle) is a type assertion: ok is true when the value really is a Circle.
Puntos clave
- There is no implements keyword.
- A []Shape can hold different types.
value.(Circle)checks the real type.
Ejemplo ejecutable de Go
main.go
package main
import (
"fmt"
"math"
)
type Shape interface {
Area() float64
Name() string
}
type Circle struct{ Radius float64 }
type Rect struct{ Width, Height float64 }
func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius }
func (c Circle) Name() string { return "circle" }
func (r Rect) Area() float64 { return r.Width * r.Height }
func (r Rect) Name() string { return "rectangle" }
func describe(shape Shape) {
fmt.Printf("%s: %.2f\n", shape.Name(), shape.Area())
}
func main() {
shapes := []Shape{Circle{Radius: 1}, Rect{Width: 2, Height: 3.5}}
for _, shape := range shapes {
describe(shape)
}
var value any = shapes[0]
if circle, ok := value.(Circle); ok {
fmt.Println("radius:", circle.Radius)
}
}
circle: 3.14
rectangle: 7.00
radius: 1Practica
Abre el ejemplo en el compilador online, cambia un valor o añade una línea y predice la salida antes de ejecutarlo. Después rompe el código a propósito y lee el mensaje del compilador.
¿Terminaste esta lección?
Márcala como aprendida para seguir tu progreso.
Tu progreso está guardado en este navegador Inicia sesión para conservarlo en todos tus dispositivos.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
- Coste de las notificaciones Envía mensajes por email, SMS y push, donde cada canal calcula su propio coste. Fácil
- Fábrica de figuras Crea formas a partir de descripciones de texto con una fábrica y devuelve el área de cada una. Fácil