Go Interfaces
Describe behavior as a list of methods. Any type that has them satisfies the interface automatically.
- Defining an interface
- Implicit implementation
- any and type assertions
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.
Points clés
- There is no implements keyword.
- A []Shape can hold different types.
value.(Circle)checks the real type.
Exemple Go exécutable
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: 1S'entraîner
Leçon terminée ?
Marquez-la comme apprise pour suivre votre progression.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Coût des notifications Envoyez des messages par e-mail, SMS et push, chaque canal calculant son propre coût. Facile
- Fabrique de formes Créer des formes à partir de descriptions textuelles avec une fabrique et retourner l'aire de chacune. Facile