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

Tableaux de taille fixe

Dans Go, un tableau a une longueur fixe, une partie intégrante de sa propre tapez : [N]T. C'est une primitive rarement utilisée directement dans le code application — vous travaillerez presque toujours avec des slices (prochaine leçon) qui sont des vues dynamiques sur des tableaux.

Cependant, bien comprendre les tableaux est crucial : tout dans Go est construit au-dessus d'eux.

Déclaration et initialisation

Go
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3}            // inferenza con :=
c := [3]int{}                   // tutti zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4}       // lunghezza dedotta = 4

La valeur zéro d'un tableau est un tableau de la longueur déclarée avec tous les éléments à leur valeur nulle :

Go
var nums [5]int  // [0 0 0 0 0]

Indexation et len

Go
a := [3]int{10, 20, 30}
fmt.Println(a[0])      // 10
a[1] = 99
fmt.Println(len(a))    // 3

Les accès hors de portée provoquent une panique au moment de l'exécution (pas un problème indéfini silencieux comme en C).

La longueur fait partie du type

Go
var a [3]int
var b [4]int
// a = b   // ERRORE: tipi diversi

[3]int et [4]int sont des types distincts, même s'ils contiennent tous deux int. C'est pourquoi les tableaux sont rarement transmis à fonctions : vous devez coder en dur la longueur dans le type du paramètre.

Copier par valeur

Contrairement aux tranches (référence) et aux cartes (référence), les tableaux ils sont copiés par valeur :

Go
a := [3]int{1, 2, 3}
b := a               // copia
b[0] = 99
fmt.Println(a[0])    // 1 — a non è cambiato

Il en va de même pour le passage à la fonction : une fonction reçoit son propre copie.

Quand utiliser les tableaux ?

  • Tampon de taille fixe au moment de la compilation (par exemple [16]byte pour un MD5).
  • Clés de carte composites (les tranches ne sont pas "comparables", les tableaux le sont).
  • Performances extrêmes (pas d'indirection, respectueux du cache).

Pour 99% du code : utilisez des tranches.

Essayez-le vous-même

Exercice#go.m4.l1.e1
Tentatives : 0Chargement…

Déclarez a sous la forme d'un tableau de 3 entiers avec les valeurs 10, 20, 30 et imprimez sa longueur.

Chargement de l'éditeur…
Afficher l'indice

Littéral de tableau : `[3]int{a, b, c}`.

Solution disponible après 3 tentatives

Exercice#go.m4.l1.e2
Tentatives : 0Chargement…

Déclarez b sous la forme d'un tableau de 5 entiers (tous des zéros) et attribuez 99 à la position 2.

Chargement de l'éditeur…
Afficher l'indice

`var b [5]int` commence à partir de [0 0 0 0 0].

Solution disponible après 3 tentatives

Quiz#go.m4.l1.e3
Prêt

[3]int et [4]int sont-ils du même type ?

Go
var a [3]int
var b [4]int
// a = b ?
Options de réponse

Récapitulatif

  • [N]T : longueur fixe, partie du type.
  • Valeur zéro : tous les éléments à leur valeur zéro.
  • [...]int{...} permet au compilateur de déduire la longueur.
  • Copier par valeur (également dans les fonctions).
  • Hors de portée = panique, pas indéfini.
  • En pratique on utilise des slices, vues sur des tableaux.