Menu
Coddy logo textTech

Implémenter une Interface

Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 14 sur 68.

Maintenant que vous savez comment définir une interface, apprenons comment les types Go les implémentent réellement. La chose la plus importante à comprendre est que Go utilise l'implémentation implicite - il n'y a pas de mot-clé ou de déclaration spéciale nécessaire.

Si un type possède toutes les méthodes requises par une interface, il satisfait automatiquement cette interface. Vous n'avez pas besoin de déclarer explicitement que votre type implémente l'interface - Go le détermine pour vous.

Voici comment cela fonctionne avec l'interface Shaper de la leçon précédente :

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Puisque le type Circle possède une méthode Area() qui retourne un float64, il implémente automatiquement l'interface Shaper. Il n'est pas nécessaire de déclarer cette relation explicitement - Go la reconnaît en se basant sur la correspondance de la signature de la méthode.

Cette approche implicite rend les interfaces Go incroyablement flexibles. N'importe quel type existant peut satisfaire une nouvelle interface tant qu'il possède les méthodes requises, même si l'interface a été créée après que le type a été écrit.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Dans ce défi, vous allez vous entraîner à implémenter une interface en créant un système de véhicule simple. Vous allez créer une structure Car qui implémente automatiquement une interface Vehicle grâce à l'implémentation implicite de Go.

Vous recevrez deux entrées :

  • Une chaîne de caractères représentant la marque de la voiture (par exemple, "Toyota")
  • Une chaîne de caractères représentant la vitesse de la voiture en km/h (par exemple, "120")

Votre tâche consiste à :

  1. Définir une interface Vehicle avec une signature de méthode : GetInfo() qui retourne une chaîne de caractères
  2. Définir une structure Car avec deux champs : Brand (string) et Speed (int)
  3. Implémenter la méthode GetInfo() pour la structure Car qui retourne une chaîne de caractères au format : "Brand: [brand], Speed: [speed] km/h"
  4. Analyser les entrées pour créer une instance de Car
  5. Appeler la méthode GetInfo() et afficher le résultat

Rappelez-vous qu'en Go, la structure Car implémentera automatiquement l'interface Vehicle car elle possède la méthode GetInfo() requise avec la signature correcte. Il n'est pas nécessaire de déclarer explicitement que Car implémente Vehicle - Go reconnaît cette relation de manière implicite.

Aide-mémoire

Go utilise l'implémentation implicite pour les interfaces - aucun mot-clé ou déclaration spéciale n'est nécessaire.

Si un type possède toutes les méthodes requises par une interface, il satisfait automatiquement cette interface :

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Puisque Circle possède une méthode Area() qui retourne un float64, il implémente automatiquement l'interface Shaper sans déclaration explicite.

Cette approche implicite rend les interfaces Go flexibles - n'importe quel type existant peut satisfaire une nouvelle interface tant qu'il possède les méthodes requises, même si l'interface a été créée après le type.

Essayez vous-même

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. Définir l'interface Vehicle avec une méthode GetInfo() string

// TODO: 2. Définir la structure Car avec les champs Brand (string) et Speed (int)

// TODO: 3. Implémenter la méthode GetInfo() pour Car

func main() {
	// Lire l'entrée
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// Convertir la chaîne de vitesse en entier
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. Créer une instance de Car en utilisant brand et speed, puis appeler GetInfo()
	result := "" // remplacez cette ligne par votre implémentation
	_ = brand
	_ = speed

	// Afficher le résultat
	fmt.Println(result)
}
quiz iconTestez-vous

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