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)