Lompati ke konten utama
Modul 4 · Pelajaran 1 dari 516/50 dalam kursus~8 min
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

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

Nilai nol dari sebuah array adalah array dengan panjang yang dideklarasikan dengan setiap elemen pada nilai nol:

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

Pengindeksan dan len

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

Akses di luar jangkauan menyebabkan kepanikan waktu proses (bukan keadaan tidak terdefinisi secara diam-diam seperti di C).

Panjang adalah bagian dari tipe

Go
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:

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

Hal 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]byte untuk MD5).
  • Kunci peta komposit (irisan tidak "sebanding", sedangkan array).
  • Performa ekstrem (tidak ada tipuan, ramah cache).

Untuk 99% kode: gunakan irisan.

Cobalah

Latihan#go.m4.l1.e1
Upaya: 0Memuat…

Deklarasikan a sebagai array 3 int dengan nilai 10, 20, 30 dan cetak panjangnya.

Memuat editor…
Tunjukkan petunjuk

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

Solusi tersedia setelah 3 upaya

Latihan#go.m4.l1.e2
Upaya: 0Memuat…

Deklarasikan b sebagai array 5 int (semuanya nol) dan tetapkan 99 ke posisi 2.

Memuat editor…
Tunjukkan petunjuk

`var b [5]int` dimulai sebagai [0 0 0 0 0].

Solusi tersedia setelah 3 upaya

Quiz#go.m4.l1.e3
Siap

Apakah [3]int dan [4]int bertipe sama?

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

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.