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.

challenge icon

Défi

Facile

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

  1. Définir une structure Book avec trois champs : Title (string), Author (string) et Pages (int)
  2. Créer une méthode appelée displayInfo avec un récepteur par valeur qui affiche les informations du livre au format suivant : "Title: [title], Author: [author], Pages: [pages]"
  3. Créer une méthode appelée getDescription avec un récepteur par valeur qui renvoie une chaîne au format suivant : "[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 contenant 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 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
    
}
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

Entraînez-vous par vous-même : Compilateur Go en ligne