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.
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 méthodes sur des structs en créant un système simple de gestion de livres. Vous créerez une struct Book et définirez des méthodes qui permettent au livre d'afficher ses informations.
Note importante : Étant donné que les titres de livres et les noms d'auteurs peuvent contenir des espaces, vous devrez utiliser bufio.Scanner pour lire des lignes entières d'entrée. La fonction fmt.Scanln s'arrête de lire au premier espace, ce qui tronquerait les titres et les noms d'auteurs composés de plusieurs mots. Utilisez bufio.NewScanner(os.Stdin) et appelez scanner.Scan() suivi de scanner.Text() pour lire des lignes complètes.
Vous recevrez trois entrées :
- Une chaîne de caractères représentant le titre du livre (par exemple,
"The Go Programming Language") - Une chaîne de caractères représentant le nom de l'auteur (par exemple,
"Alan Donovan") - Une chaîne de caractères représentant le nombre de pages (par exemple,
"380")
Votre tâche consiste à :
- Définir une struct
Bookavec trois champs :Title(string),Author(string), etPages(int) - Créer une méthode appelée
displayInfoavec un récepteur de valeur qui affiche les informations du livre au format :"Title: [title], Author: [author], Pages: [pages]" - Créer une méthode appelée
getDescriptionavec un récepteur de valeur qui retourne une chaîne de caractères au format :"[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 avec 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 retournée
Les méthodes doivent utiliser la variable réceptrice pour accéder aux champs de la struct et effectuer leurs opérations respectives. N'oubliez pas que les méthodes avec des récepteurs de valeur travaillent avec une copie de l'instance de la struct.
Aide-mémoire
Les méthodes en Go sont des fonctions qui appartiennent à un type spécifique. Elles sont définies avec un récepteur entre le mot-clé func et le nom de la méthode :
type Person struct {
Name string
Age int
}
func (p Person) greet() {
fmt.Printf("Hello, my name is %s\n", p.Name)
}Le récepteur (p Person) fait de greet une méthode du type Person. La variable p représente l'instance sur laquelle la méthode est appelée.
Les méthodes sont appelées en utilisant la notation par point sur les instances de struct, permettant aux structs d'effectuer des actions liées à leurs données.
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 comportements