Direkt zum Hauptinhalt springen
eLearner.app
Modul 4 · Lektion 1 von 516/50 im Kurs~8 min
Lektionen des Moduls (1/5)

Arrays mit fester Länge

In Go hat ein Array eine feste Länge, die in seinen Typ integriert ist: [N]T. Es handelt sich um ein Grundelement, das selten direkt im Anwendungscode verwendet wird – das werden Sie tun Arbeiten Sie fast immer mit Slices (nächste Lektion), die dynamisch sind Ansichten über Arrays.

Dennoch ist es wichtig, Arrays gut zu verstehen: Alles in Go ist gebaut oben drauf.

Deklaration und Initialisierung

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

Der Nullwert eines Arrays ist ein Array der angegebenen Länge mit jedem Element auf seinem Nullwert:

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

Indizierung und len

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

Ein Zugriff außerhalb des Bereichs führt zu einer Laufzeitpanik (kein stilles Undefiniertes). wie in C).

Länge ist Teil des Typs

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

[3]int und [4]int sind unterschiedliche Typen, auch wenn beide gelten int. Aus diesem Grund werden Arrays selten an Funktionen übergeben: Sie müssten es tun Codieren Sie die Länge fest in den Parametertyp.

Nach Wert kopieren

Im Gegensatz zu Slices (Referenz) und Maps (Referenz) werden Arrays von kopiert Wert:

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

Das Gleiche gilt bei der Übergabe an eine Funktion: Die Funktion erhält ihre eigenes Exemplar.

Wann werden Arrays verwendet?

  • Puffer mit fester Größe, die zur Kompilierungszeit bekannt sind (z. B. [16]byte für einen MD5).
  • Zusammengesetzte Kartenschlüssel (Slices sind nicht „vergleichbar“, Arrays schon).
  • Extreme Leistung (keine Indirektion, Cache-freundlich).

Für 99 % des Codes: Slices verwenden.

Probieren Sie es aus

Übung#go.m4.l1.e1
Versuche: 0Wird geladen…

Deklarieren Sie a als Array von 3 Ganzzahlen mit den Werten 10, 20, 30 und geben Sie seine Länge aus.

Editor wird geladen…
Hinweis anzeigen

Array-Literal: `[3]int{a, b, c}`.

Lösung nach 3 Versuchen verfügbar

Übung#go.m4.l1.e2
Versuche: 0Wird geladen…

Deklarieren Sie b als Array von 5 Ints (alle Nullen) und weisen Sie Position 2 99 zu.

Editor wird geladen…
Hinweis anzeigen

`var b [5]int` beginnt als [0 0 0 0 0].

Lösung nach 3 Versuchen verfügbar

Quiz#go.m4.l1.e3
Bereit

Sind [3]int und [4]int vom gleichen Typ?

Go
var a [3]int
var b [4]int
// a = b ?
Antwortoptionen

Zusammenfassung

  • [N]T: feste Länge, Teil des Typs.
  • Nullwert: jedes Element auf seinem Nullwert.
  • [...]int{...} lässt den Compiler auf die Länge schließen.
  • Kopieren nach Wert (einschließlich interner Funktionen).
  • Außerhalb des Bereichs = Panik, nicht undefiniert.
  • In der Praxis verwenden Sie Slices, bei denen es sich um Ansichten über Arrays handelt.