Introduction
Ce laboratoire porte sur les interfaces en Golang. Les interfaces sont des collections nommées de signatures de méthodes.
This tutorial is from open-source community. Access the source code
💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici
Ce laboratoire porte sur les interfaces en Golang. Les interfaces sont des collections nommées de signatures de méthodes.
Le problème est d'implémenter une interface en Go, il suffit d'implémenter toutes les méthodes de l'interface. Ici, nous implémentons geometry
sur des rect
et des circle
.
measure
pour travailler sur n'importe quelle geometry
.circle
et rect
comme arguments pour measure
.$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793
## Pour en savoir plus sur les interfaces de Go, consultez ce
## [super article de blog](https://jordanorelli.tumblr.com/post/32665860244/how-to-use-interfaces-in-go).
Voici le code complet ci-dessous :
// Les _Interfaces_ sont des collections nommées de signatures de méthodes.
package main
import (
"fmt"
"math"
)
// Voici une interface de base pour les formes géométriques.
type geometry interface {
area() float64
perim() float64
}
// Pour notre exemple, nous allons implémenter cette interface sur
// les types `rect` et `circle`.
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
// Pour implémenter une interface en Go, il suffit d'implémenter
// toutes les méthodes de l'interface. Ici, nous implémentons
// `geometry` sur les `rect`.
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
// L'implémentation pour les `circle`.
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return 2 * math.Pi * c.radius
}
// Si une variable a un type d'interface, alors nous pouvons appeler
// les méthodes qui sont dans l'interface nommée. Voici une
// fonction générique `measure` qui profite de cela pour travailler
// sur n'importe quelle `geometry`.
func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perim())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
// Les types de structs `circle` et `rect` implémentent tous les deux
// l'interface `geometry`, donc nous pouvons utiliser des instances
// de ces structs comme arguments pour `measure`.
measure(r)
measure(c)
}
Ce laboratoire porte sur l'implémentation d'une interface en Go. Nous avons implémenté l'interface geometry
sur des rect
et des circle
et utilisé une fonction générique measure
pour travailler sur n'importe quelle geometry
.