Passer au contenu principal
eLearner.app
Module 1 · Leçon 2 sur 52/50 dans le cours~10 min
Leçons du module (2/5)

Valeur zéro et conversions de type

En Go, chaque variable déclarée sans valeur explicite reçoit un valeur zéro : la "valeur neutre" de son type. C'est une énorme différence à partir de JavaScript, où let x; produit undefined, ou C, où vous terminez avec une mémoire poubelle. Pas de undefined, pas d'UB : juste zéro.

La table des valeurs nulles

CatégorieTapezValeur zéro
Numériqueint, int64, float32, float64, uint, ...0
Booléenboolfalse
Chaînestring"" (chaîne vide)
Pointeurint640int641
Tranche / Carte / Canalint642, int643, int644int645
Fonction / Interfaceint646, int647int648
Structureint649tous les champs à leur valeur zéro
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

Les conversions sont TOUJOURS explicites

Contrairement à C, Python ou JS, Go n'en promeut pas automatiquement un type numérique à un autre : vous devez écrire type(value).

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

Ceci est vrai même pour les types « compatibles » comme int et int64 : un une conversion explicite est toujours requise.

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

Conversion entre numériques : attention à la troncature

Passer de float64 à int tronque vers zéro, ça ne marche pas rond :

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

Conversion de chaîne ↔ nombre

string(65) ne donne PAS "65" : il donne "A" (la rune avec le code point 65). Pour chaîne → nombre et vice versa vous avez besoin du strconv paquet:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

Nous le couvrirons en profondeur dans le module Stdlib.

A ton tour

Exercice#go.m1.l2.e1
Tentatives : 0Chargement…

Déclarez un compteur variable de type int sans l'initialiser et imprimez-le. Attendu : 0.

Chargement de l'éditeur…
Afficher l'indice

Sans initialiseur, la variable prend la valeur zéro du type.

Solution disponible après 3 tentatives

Exercice#go.m1.l2.e2
Tentatives : 0Chargement…

Étant donné l'entier n = 10, convertissez n en float64 et divisez par 4. Imprimez le résultat (attendu 2,5).

Chargement de l'éditeur…
Afficher l'indice

Sans la conversion explicite, `n / 4` est une division entière qui donne 2.

Solution disponible après 3 tentatives

Quiz#go.m1.l2.e3
Prêt

Qu'imprime ce code ?

Go
f := 3.7
fmt.Println(int(f))
Options de réponse

Récapitulatif

  • Chaque type a une valeur zéro cohérente : pas de undefined, pas d'UB.
  • Slice/map/chan/func/interface/pointer ont la valeur nulle nil.
  • Les conversions numériques sont toujours explicites avec type(value).
  • int(float) tronque vers zéro ; pour arrondir, utilisez math.Round.
  • Pour chaîne ↔ numéro, utilisez le package strconv (PAS une distribution directe).