Sobes.tech
Junior

Kāda ir galvenā atšķirība starp slices un arrays Go valodā?

sobes.tech AI

Atbilde no AI

Sliči ir dinamiski maināmi masīvu skati.

Īpašība Masīvs (Array) Sličs (Slice)
Izmērs Fiksēts, noteikts izveides laikā Dinamisks, var mainīties
Tips [n]T (kur n ir izmērs, T ir tips) []T (kur T ir tips)
Pārsūtīšana funkcijām Pa vērtību (kopija) Pa atsauci uz galveno masīvu, tiek pārsūtīti head, len un cap (patiesībā, tiek izveidota jauna SliceHeader struktūra ar šo lauku kopijām)
Izveide var a [5]int vai b := [3]string{"a", "b", "c"} var s []int vai t := []int{1, 2, 3} vai u := make([]int, 5)
Veiktspēja Prognozējamāka, jo izmērs ir fiksēts, var būt efektīvāka mazākiem izmēriem Var radīt papildu izmaksas, mainot izmēru (re-izdalīšana no galvenā masīva)
// Masīva piemērs
var arr [3]int = [3]int{1, 2, 3}

// No masīva izveidots sličs
slice := arr[1:] // sličs {2, 3}

// Sliča izveides piemērs
s := []int{10, 20, 30} // galvenais masīvs {10, 20, 30}, garums = 3, kapacitāte = 3

// Sliča modifikācija
s = append(s, 40) // tagad s {10, 20, 30, 40}. Ja kapacitāte nav pietiekama, tiek izveidots jauns galvenais masīvs, garums = 4, kapacitāte = 6 (parasti dubultojot kapacitāti)

// Elementa modifikācija sličā maina galveno masīvu
slice[0] = 99 // arr tagad {1, 99, 3}
fmt.Println(arr)