Menu
Coddy logo textTech

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.

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 à 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 à :

  1. Définir une struct Book avec trois champs : Title (string), Author (string), et Pages (int)
  2. Créer une méthode appelée displayInfo avec un récepteur de valeur qui affiche les informations du livre au format : "Title: [title], Author: [author], Pages: [pages]"
  3. Créer une méthode appelée getDescription avec un récepteur de valeur qui retourne une chaîne de caractères au format : "[title] by [author]"
  4. Utiliser bufio.Scanner pour 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() puis scanner.Text()
    • Cela garantit que les titres et les noms d'auteurs avec des espaces sont lus correctement
  5. Analyser les entrées pour créer une instance de Book
  6. Appeler la méthode displayInfo pour afficher les informations du livre
  7. Appeler la méthode getDescription et 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
    
}
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