Ana içeriğe geç
Modül 4 · Ders 1 ders 5Kurstaki 16/50~8 min
Modül dersleri (1/5)

Sabit uzunluklu diziler

Go'da bir dizi, türüne göre ayarlanan sabit bir uzunluğa sahiptir: [N]T. Doğrudan uygulama kodunda nadiren kullanılan bir ilkeldir; neredeyse her zaman dinamik olan dilimlerle (sonraki ders) çalışın diziler üzerindeki görünümler.

Yine de dizileri iyi anlamak önemlidir: Go'daki her şey yerleşiktir onların üstünde.

Bildirim ve başlatma

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

Bir dizinin sıfır değeri, her biri belirtilen uzunluktaki bir dizidir. sıfır değerindeki eleman:

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

Dizine Ekleme ve len

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

Menzil dışı erişim çalışma zamanı paniğine neden olur (sessiz tanımsız bir durum değil) C'deki gibi).

Uzunluk türün bir parçasıdır

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

[3]int ve [4]int her ikisi de geçerli olsa da farklı türlerdir int. Dizilerin işlevlere nadiren aktarılmasının nedeni budur: uzunluğu parametre türüne sabit kodlayın.

Değere göre kopyala

Dilimlerin (referans) ve haritaların (referans) aksine, diziler tarafından kopyalanır. değer:

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

Aynı durum bir fonksiyona geçerken de geçerlidir: fonksiyon, kendi kopyası.

Diziler ne zaman kullanılmalı?

  • Derleme zamanında bilinen sabit boyutlu arabellekler (örneğin, MD5 için [16]byte).
  • Bileşik harita anahtarları (dilimler "karşılaştırılabilir" değildir, diziler karşılaştırılabilirdir).
  • Olağanüstü performans (dolaylılık yok, önbellek dostu).

Kodun %99'u için dilimler kullanın.

Deneyin

Egzersiz#go.m4.l1.e1
Denemeler: 0Yükleniyor…

a'yı 10, 20, 30 değerlerine sahip 3 inçlik bir dizi olarak bildirin ve uzunluğunu yazdırın.

Düzenleyici yükleniyor…
İpucu göster

Dizi değişmezi: `[3]int{a, b, c}'.

3 denemeden sonra çözüm mevcut

Egzersiz#go.m4.l1.e2
Denemeler: 0Yükleniyor…

b'yi 5 inçlik (hepsi sıfır) bir dizi olarak bildirin ve 99'u 2. konuma atayın.

Düzenleyici yükleniyor…
İpucu göster

'var b [5]int' [0 0 0 0 0] olarak başlar.

3 denemeden sonra çözüm mevcut

Quiz#go.m4.l1.e3
Hazır

[3]int ve [4]int aynı türde midir?

Go
var a [3]int
var b [4]int
// a = b ?
Cevap seçenekleri

Özet

  • [N]T: sabit uzunluk, türün parçası.
  • Sıfır değer: her öğe sıfır değerindedir.
  • [...]int{...} derleyicinin uzunluğu çıkarmasını sağlar.
  • Değere göre kopyalayın (iç işlevler dahil).
  • Menzil dışı = panik, tanımsız değil.
  • Uygulamada, diziler üzerindeki görünümler olan dilimleri kullanın.