Menu
Coddy logo textTech

Valeurs par défaut et Zero Values

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy — leçon 17 sur 107.

En Go, chaque variable a une valeur zéro — la valeur par défaut attribuée lorsque vous déclarez une variable sans initialisation explicite. Comprendre les valeurs zéro est essentiel pour travailler avec les structs, car les champs non initialisés reçoivent automatiquement ces valeurs par défaut.

Chaque type a sa propre valeur zéro :

TypeValeur Zéro
int, float640
string"" (chaîne vide)
boolfalse
pointer, slice, mapnil

Lorsque vous créez une struct, tout champ que vous ne définissez pas explicitement reçoit sa valeur zéro.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (chaîne vide)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Cela s'applique également à l'initialisation partielle. Seuls les champs que vous spécifiez reçoivent des valeurs personnalisées.

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Les valeurs par défaut rendent les structs immédiatement utilisables sans initialisation explicite. Cependant, faites attention aux types de référence comme les slices et les maps — leur valeur par défaut est nil, ce qui peut provoquer des panics à l'exécution si vous essayez de les utiliser sans initialisation.

challenge icon

Défi

Facile

Construisons un système de profil de joueur qui démontre le fonctionnement des valeurs par défaut (zero values) en Go. Vous allez créer un profil de jeu où certains champs sont explicitement définis tandis que d'autres reposent sur leurs valeurs par défaut.

Vous organiserez votre code sur deux fichiers :

  • player.go : Définissez une structure Player avec les champs suivants : Username (string), Level (int), Score (int), IsPremium (bool), et GuildName (string). Créez également une méthode DisplayProfile qui retourne une chaîne formatée affichant toutes les informations du joueur.
  • main.go : Lisez un nom d'utilisateur à partir de l'entrée et créez un Player en utilisant uniquement une initialisation partielle — définissez uniquement le champ Username. Ensuite, affichez le profil complet pour voir comment Go remplit les champs non définis avec leurs valeurs par défaut.

L'entrée suivante sera fournie :

  • Ligne 1 : Le nom d'utilisateur du joueur

Votre méthode DisplayProfile doit retourner une chaîne dans ce format exact :

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

Par exemple, si le nom d'utilisateur est ShadowKnight, votre sortie doit afficher le nom d'utilisateur ainsi que toutes les valeurs par défaut pour les champs non initialisés :

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

Remarquez comment le champ Guild n'affiche rien après les deux-points — c'est la valeur par défaut de la chaîne vide. Ce défi vous aide à voir exactement ce que Go assigne à chaque type lorsque vous ne fournissez pas de valeur explicite.

Aide-mémoire

En Go, chaque variable a une valeur zéro — la valeur par défaut attribuée lorsque vous déclarez une variable sans initialisation explicite.

Chaque type a sa propre valeur zéro :

TypeValeur zéro
int, float640
string"" (chaîne vide)
boolfalse
pointer, slice, mapnil

Lorsque vous créez une structure (struct), tout champ que vous ne définissez pas explicitement reçoit sa valeur zéro :

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (chaîne vide)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Initialisation partielle — seuls les champs spécifiés reçoivent des valeurs personnalisées :

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Les valeurs zéro rendent les structures immédiatement utilisables sans initialisation explicite. Soyez prudent avec les types de référence comme les slices et les maps — leur valeur zéro est nil, ce qui peut provoquer des panics à l'exécution s'ils sont utilisés sans initialisation.

Essayez vous-même

package main

import (
	"fmt"
)

func main() {
	// Lire le `username` depuis l'entrée
	var username string
	fmt.Scanln(&username)

	// TODO: Créer un `Player` en utilisant une initialisation partielle
	// Définir uniquement le champ `Username`, laisser les autres champs utiliser les valeurs par défaut

	// TODO: Afficher le profil du joueur en utilisant la méthode `DisplayProfile`
}
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 Programmation Orientée Objet