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
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 = 4Bir dizinin sıfır değeri, her biri belirtilen uzunluktaki bir dizidir. sıfır değerindeki eleman:
var nums [5]int // [0 0 0 0 0]Dizine Ekleme ve len
a := [3]int{10, 20, 30}
fmt.Println(a[0]) // 10
a[1] = 99
fmt.Println(len(a)) // 3Menzil 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
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:
a := [3]int{1, 2, 3}
b := a // copy
b[0] = 99
fmt.Println(a[0]) // 1 — a is unchangedAynı 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
a'yı 10, 20, 30 değerlerine sahip 3 inçlik bir dizi olarak bildirin ve uzunluğunu yazdırın.
İpucu göster
Dizi değişmezi: `[3]int{a, b, c}'.
3 denemeden sonra çözüm mevcut
b'yi 5 inçlik (hepsi sıfır) bir dizi olarak bildirin ve 99'u 2. konuma atayın.
İpucu göster
'var b [5]int' [0 0 0 0 0] olarak başlar.
3 denemeden sonra çözüm mevcut
[3]int ve [4]int aynı türde midir?
var a [3]int
var b [4]int
// a = b ?Ö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.