Sobes.tech
Junior

Kuo skiriasi slices ir arrays Go kalboje?

sobes.tech AI

Atsakymas iš AI

Sklai yra dinamiškai keičiamų masyvų vaizdai.

Savybė Masyvas (Array) Sklai (Slice)
Dydis Fiksuotas, nustatomas kuriant Dinamiškas, gali keistis
Tipas [n]T (kur n yra dydis, T tipas) []T (kur T yra tipas)
Perdavimas funkcijoms Pagal reikšmę (kopiją) Pagal nuorodą į pagrindinį masyvą, perduodami head, len ir cap (iš tikrųjų, sukuriama nauja SliceHeader struktūra su šių laukų kopijomis)
Kūrimas var a [5]int arba b := [3]string{"a", "b", "c"} var s []int arba t := []int{1, 2, 3} arba u := make([]int, 5)
Veikimas Daugiau prognozuojamas dėl fiksuoto dydžio, gali būti efektyvesnis mažų dydžių atvejais Gali turėti papildomų išlaidų keičiant dydį (perkėlimas į naują pagrindinį masyvą)
// Masyvo pavyzdys
var arr [3]int = [3]int{1, 2, 3}

// Iš masyvo sukurtas sklaidas pavyzdys
slice := arr[1:] // sklaidas {2, 3}

// Sklaido sukūrimo pavyzdys
s := []int{10, 20, 30} // pagrindinis masyvas {10, 20, 30}, ilgis = 3, talpa = 3

// Sklaido keitimas
s = append(s, 40) // dabar s {10, 20, 30, 40}. Jei talpa nėra pakankama, sukuriamas naujas pagrindinis masyvas, ilgis = 4, talpa = 6 (dažniausiai dvigubinant talpą)

// Elemento keitimas sklaidoje keičia pagrindinį masyvą
slice[0] = 99 // arr dabar {1, 99, 3}
fmt.Println(arr)