Salt la conținutul principal
Modulul 4 · Lecția 1 din 516/50 în curs~8 min
Lecții din modul (1/5)

Matrice cu lungime fixă

În Go, o matrice are o lungime fixă, coaptă în tipul său: [N]T. Este o primitivă rar folosită direct în codul aplicației - veți aproape întotdeauna lucrați cu slice (lecția următoare), care sunt dinamice vederi peste matrice.

Cu toate acestea, înțelegerea bine a matricelor este esențială: totul în Go este construit deasupra lor.

Declaratie si initializare

Go
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3}            // inference with :=
c := [3]int{}                   // all zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4}       // length inferred = 4

Valoarea zero a unui tablou este o matrice cu lungimea declarată cu fiecare element la valoarea sa zero:

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

Indexare și len

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

Accesul în afara intervalului provoacă o panică de rulare (nu un nedefinit silențios ca în C).

Lungimea face parte din tip

Go
var a [3]int
var b [4]int
// a = b   // ERROR: different types

[3]int și [4]int sunt tipuri distincte, chiar dacă ambele țin apăsat int. Acesta este motivul pentru care matricele sunt rareori transmise funcțiilor: ar trebui să faceți acest lucru codificați lungimea în tipul de parametru.

Copiați după valoare

Spre deosebire de felii (referință) și hărți (referință), matricele sunt copiate de valoare:

Go
a := [3]int{1, 2, 3}
b := a               // copy
b[0] = 99
fmt.Println(a[0])    // 1 — a is unchanged

Același lucru este valabil și atunci când treceți la o funcție: funcția o primește copie proprie.

Când să folosiți matrice?

  • Buffere de dimensiune fixă ​​cunoscute la momentul compilării (de exemplu, [16]byte pentru un MD5).
  • Chei de hartă compusă (slicele nu sunt „comparabile”, matricele sunt).
  • Performanță extremă (fără indirecte, cache-friendly).

Pentru 99% din cod: utilizați felii.

Încearcă

Exercițiu#go.m4.l1.e1
Încercări: 0Se încarcă…

Declarați a ca o matrice de 3 inți cu valorile 10, 20, 30 și imprimați lungimea acestuia.

Se încarcă editorul...
Afișează indiciu

Literal de matrice: `[3]int{a, b, c}`.

Soluție disponibilă după 3 încercări

Exercițiu#go.m4.l1.e2
Încercări: 0Se încarcă…

Declarați b ca o matrice de 5 inți (toate zero) și atribuiți 99 poziției 2.

Se încarcă editorul...
Afișează indiciu

`var b [5]int` începe ca [0 0 0 0 0].

Soluție disponibilă după 3 încercări

Quiz#go.m4.l1.e3
Gata

Sunt [3]int și [4]int același tip?

Go
var a [3]int
var b [4]int
// a = b ?
Opțiuni de răspuns

Recapitulare

  • [N]T: lungime fixă, parte a tipului.
  • Valoare zero: fiecare element la valoarea sa zero.
  • [...]int{...} permite compilatorului să deducă lungimea.
  • Copiere după valoare (inclusiv funcții interne).
  • În afara limitei = panică, nu nedefinit.
  • În practică, utilizați slices, care sunt vederi peste matrice.