Pelajaran modul (1/5)
Array dengan panjang tetap
Di Go, sebuah array memiliki panjang tetap, dimasukkan ke dalam tipenya: [N]T.
Ini adalah primitif yang jarang digunakan secara langsung dalam kode aplikasi — Anda akan melakukannya
hampir selalu bekerja dengan slices (pelajaran berikutnya), yang bersifat dinamis
tampilan atas array.
Namun, memahami array dengan baik sangatlah penting: semua yang ada di Go sudah dibuat di atas mereka.
Deklarasi dan inisialisasi
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 = 4Nilai nol dari sebuah array adalah array dengan panjang yang dideklarasikan dengan setiap elemen pada nilai nol:
var nums [5]int // [0 0 0 0 0]Pengindeksan dan len
a := [3]int{10, 20, 30}
fmt.Println(a[0]) // 10
a[1] = 99
fmt.Println(len(a)) // 3Akses di luar jangkauan menyebabkan kepanikan waktu proses (bukan keadaan tidak terdefinisi secara diam-diam seperti di C).
Panjang adalah bagian dari tipe
var a [3]int
var b [4]int
// a = b // ERROR: different types[3]int dan [4]int adalah tipe yang berbeda, meskipun keduanya sama-sama berlaku
int. Inilah sebabnya mengapa array jarang diteruskan ke fungsi: Anda harus melakukannya
kode keras panjangnya ke dalam tipe parameter.
Salin berdasarkan nilai
Tidak seperti irisan (referensi) dan peta (referensi), array disalin oleh nilai:
a := [3]int{1, 2, 3}
b := a // copy
b[0] = 99
fmt.Println(a[0]) // 1 — a is unchangedHal yang sama berlaku ketika meneruskan ke suatu fungsi: fungsi tersebut menerimanya salinan sendiri.
Kapan menggunakan array?
- Buffer berukuran tetap yang diketahui pada waktu kompilasi (misalnya
[16]byteuntuk MD5). - Kunci peta komposit (irisan tidak "sebanding", sedangkan array).
- Performa ekstrem (tidak ada tipuan, ramah cache).
Untuk 99% kode: gunakan irisan.
Cobalah
Deklarasikan a sebagai array 3 int dengan nilai 10, 20, 30 dan cetak panjangnya.
Tunjukkan petunjuk
Literal larik: `[3]int{a, b, c}`.
Solusi tersedia setelah 3 upaya
Deklarasikan b sebagai array 5 int (semuanya nol) dan tetapkan 99 ke posisi 2.
Tunjukkan petunjuk
`var b [5]int` dimulai sebagai [0 0 0 0 0].
Solusi tersedia setelah 3 upaya
Apakah [3]int dan [4]int bertipe sama?
var a [3]int
var b [4]int
// a = b ?Rekap
[N]T: panjang tetap, bagian dari tipe.- Nilai nol: setiap elemen bernilai nol.
[...]int{...}memungkinkan kompiler menyimpulkan panjangnya.- Salin berdasarkan nilai (termasuk fungsi di dalam).
- Di luar jangkauan = panik, bukan tidak terdefinisi.
- Dalam praktiknya, gunakan slices, yang merupakan tampilan array.