Sobes.tech
Junior

Koja je ključna razlika između slices i nizova u Go?

sobes.tech АИ

Одговор од АИ

Sličevi su dinamički promenjivi prikazi nizova.

Karakteristika Niz (Array) Sličevi (Slice)
Veličina Fiksna, određuje se pri kreiranju Dinamička, može se menjati
Tip [n]T (gde je n veličina, T tip) []T (gde je T tip)
Prenos u funkcije Po vrednosti (kopija) Po referenci na osnovni niz, prenose se head, len i cap (u stvari, kreira se nova struktura SliceHeader sa kopijama ovih polja)
Kreiranje var a [5]int ili b := [3]string{"a", "b", "c"} var s []int ili t := []int{1, 2, 3} ili u := make([]int, 5)
Performanse Predvidljivije zbog fiksne veličine, može biti efikasnije za manje veličine Može imati troškove pri promeni veličine (re- alokacija osnovnog niza)
// Primer niza
var arr [3]int = [3]int{1, 2, 3}

// Primer sa slice-om napravljenim od niza
slice := arr[1:] // slice {2, 3}

// Primer za kreiranje slice-a
s := []int{10, 20, 30} // osnovni niz {10, 20, 30}, dužina = 3, kapacitet = 3

// Izmena slice-a
s = append(s, 40) // sada s {10, 20, 30, 40}. Ako kapacitet nije dovoljan, kreiraće se novi osnovni niz, dužina = 4, kapacitet = 6 (obično dupliranje kapaciteta).

// Izmena elementa u slice-u menja osnovni niz
slice[0] = 99 // arr sada {1, 99, 3}
fmt.Println(arr)