Définir des méthodes sur des structures
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 6 sur 68.
En Go, une méthode est une fonction qui appartient à un type spécifique. Contrairement aux fonctions régulières qui sont autonomes, les méthodes sont attachées à des structs et vous permettent de définir un comportement pour vos types de données personnalisés.
Pour définir une méthode, vous placez un receveur entre le mot-clé func et le nom de la méthode. Le receveur spécifie à quel type la méthode appartient.
type Person struct {
Name string
Age int
}
func (p Person) greet() {
fmt.Printf("Hello, my name is %s\n", p.Name)
}Dans cet exemple, (p Person) est le receveur, faisant de greet une méthode du type Person. La variable p représente l'instance de Person sur laquelle la méthode est appelée, de manière similaire à this dans d'autres langages.
Vous pouvez ensuite appeler la méthode en utilisant la notation par point sur n'importe quelle instance de Person, donnant ainsi à vos structures la capacité d'effectuer des actions liées à leurs données.
Défi
FacileDans ce défi, tu vas t’entraîner à définir des méthodes sur des structures en créant un système simple de gestion de livres. Tu vas créer une structure Book et définir des méthodes qui permettent au livre d’afficher ses informations.
Remarque importante : Comme les titres des livres et les noms des auteurs peuvent contenir des espaces, tu devras utiliser bufio.Scanner pour lire des lignes d’entrée entières. La fonction fmt.Scanln s’arrête au premier espace, ce qui empêcherait de lire correctement les titres et les noms d’auteurs composés de plusieurs mots. Utilise bufio.NewScanner(os.Stdin) et appelle scanner.Scan(), puis scanner.Text() pour lire des lignes complètes.
Tu recevras trois entrées :
- Une chaîne représentant le titre du livre (par exemple,
"The Go Programming Language") - Une chaîne représentant le nom de l’auteur (par exemple,
"Alan Donovan") - Une chaîne représentant le nombre de pages (par exemple,
"380")
Ta tâche consiste à :
- Définir une structure
Bookavec trois champs :Title(string),Author(string) etPages(int) - Créer une méthode appelée
displayInfoavec un récepteur par valeur qui affiche les informations du livre au format suivant :"Title: [title], Author: [author], Pages: [pages]" - Créer une méthode appelée
getDescriptionavec un récepteur par valeur qui renvoie une chaîne au format suivant :"[title] by [author]" - Utiliser
bufio.Scannerpour lire correctement les lignes d’entrée :- Créer un scanner :
scanner := bufio.NewScanner(os.Stdin) - Pour chaque ligne d’entrée : appeler
scanner.Scan(), puisscanner.Text() - Cela garantit que les titres et les noms d’auteurs contenant des espaces sont lus correctement
- Créer un scanner :
- Analyser les entrées pour créer une instance de
Book - Appeler la méthode
displayInfopour afficher les informations du livre - Appeler la méthode
getDescriptionet afficher la description renvoyée
Les méthodes doivent utiliser la variable de récepteur pour accéder aux champs de la structure et effectuer leurs opérations respectives. N’oublie pas que les méthodes avec des récepteurs par valeur fonctionnent avec une copie de l’instance de la structure.
Essayez vous-même
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
// TODO: Définissez votre structure Book ici
// TODO: Définissez votre méthode displayInfo ici
// TODO: Définissez votre méthode getDescription ici
func main() {
// Créer un scanner pour lire les lignes d'entrée
scanner := bufio.NewScanner(os.Stdin)
// Lire le titre
scanner.Scan()
title := scanner.Text()
// Lire l'auteur
scanner.Scan()
author := scanner.Text()
// Lire les pages
scanner.Scan()
pagesStr := scanner.Text()
// Convertir la chaîne de pages en entier
pages, _ := strconv.Atoi(pagesStr)
// TODO: Créer une instance de Book et appeler les méthodes
}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 comportementsEntraînez-vous par vous-même : Compilateur Go en ligne