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
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 = 4La valeur zéro d'un tableau est un tableau de la longueur déclarée avec tous les éléments à leur valeur nulle :
var nums [5]int // [0 0 0 0 0]Indexation et len
a := [3]int{10, 20, 30}
fmt.Println(a[0]) // 10
a[1] = 99
fmt.Println(len(a)) // 3Les 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
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 :
a := [3]int{1, 2, 3}
b := a // copia
b[0] = 99
fmt.Println(a[0]) // 1 — a non è cambiatoIl 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]bytepour 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
Déclarez a sous la forme d'un tableau de 3 entiers avec les valeurs 10, 20, 30 et imprimez sa longueur.
Afficher l'indice
Littéral de tableau : `[3]int{a, b, c}`.
Solution disponible après 3 tentatives
Déclarez b sous la forme d'un tableau de 5 entiers (tous des zéros) et attribuez 99 à la position 2.
Afficher l'indice
`var b [5]int` commence à partir de [0 0 0 0 0].
Solution disponible après 3 tentatives
[3]int et [4]int sont-ils du même type ?
var a [3]int
var b [4]int
// a = b ?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.