Définir une Interface
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 13 sur 68.
Maintenant que vous comprenez ce que sont les interfaces d'un point de vue conceptuel, apprenons comment en définir une concrètement en Go. Une interface est définie à l'aide du mot-clé interface suivi d'un ensemble de signatures de méthodes entourées d'accolades.
Voici la syntaxe de base pour définir une interface :
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Remarquez qu'une interface ne contient que des signatures de méthode - le nom de la méthode, les paramètres et les types de retour - mais aucune implémentation. L'interface ne spécifie pas comment ces méthodes doivent fonctionner, seulement quelles méthodes doivent exister.
Par exemple, voici comment vous définiriez une interface Shaper simple qui exige que tout type l'implémentant possède une méthode Area :
type Shaper interface {
Area() float64
}Cette interface établit un contrat : tout type qui souhaite être considéré comme un Shaper doit posséder une méthode Area qui ne prend aucun paramètre et retourne un float64. L'interface ne se soucie pas de la nature du type ni de la manière dont il calcule l'aire - elle se soucie seulement du fait que la méthode existe avec la signature correcte.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileDans ce défi, vous allez vous entraîner à définir des interfaces en Go en créant un système de lecteur multimédia simple. Vous définirez une interface qui établit un contrat pour différents types d'appareils multimédias.
Vous recevrez une entrée :
- Une chaîne de caractères représentant une action multimédia (par exemple,
"play","pause", ou"stop")
Votre tâche consiste à :
- Définir une interface nommée
MediaPlayeravec trois signatures de méthode :Play()qui retourne un stringPause()qui retourne un stringStop()qui retourne un string
- En fonction de l'action d'entrée, affichez la signature de méthode correspondante de votre interface
MediaPlayerau format :"MediaPlayer interface requires: [MethodName]() string"
L'instruction d'affichage est destinée à refléter l'interface que vous avez définie ci-dessus — vous décrivez quelle signature de méthode l'interface MediaPlayer requiert pour l'action donnée. Considérez cela comme votre programme inspectant et signalant son propre contrat d'interface.
Les noms de méthodes doivent commencer par une majuscule (exportés) car ils font partie d'une définition d'interface. Pour l'entrée "play", affichez "MediaPlayer interface requires: Play() string", pour "pause" affichez "MediaPlayer interface requires: Pause() string", et pour "stop" affichez "MediaPlayer interface requires: Stop() string".
Ce défi se concentre sur le concept fondamental de la définition d'interfaces avec des signatures de méthode, établissant le contrat que tout type d'implémentation doit remplir.
Aide-mémoire
Une interface est définie à l'aide du mot-clé interface suivi des signatures de méthode entre accolades :
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Les interfaces ne contiennent que des signatures de méthode (nom, paramètres, types de retour) mais aucune implémentation :
type Shaper interface {
Area() float64
}Tout type qui implémente toutes les méthodes d'une interface satisfait automatiquement le contrat de cette interface.
Essayez vous-même
package main
import "fmt"
func main() {
// Lire l'entrée
var action string
fmt.Scanln(&action)
// TODO : Définissez votre interface MediaPlayer ici
// TODO : Écrivez votre code ci-dessous pour gérer l'action et afficher la sortie requise
// Afficher le résultat
// N'oubliez pas d'afficher au format : "MediaPlayer interface requires: [MethodName]() string"
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements