Sobes.tech
Junior

Ի՞նչ է հիմնական տարբերությունը slices և arrays-ի միջև Go-ում։

sobes.tech AI

Պատասխան AI-ից

Սլայսները՝ դա դինամիկ փոփոխվող զանգվածների տեսք են։

Գծագիր Զանգված (Array) Սլայս (Slice)
Մակերես Ֆիքս, որոշվում է ստեղծման ժամանակ Դինամիկ, կարող է փոխվել
Տիպ [n]T (որտեղ n չափսն է, T տիպը) []T (որտեղ T տիպն է)
Փոխանցում ֆունկցիաներին Քանի որ արժեքով (կոպիա) Քանի որ հղումով՝ փոխանցվում է head, len և cap (իրականում, ստեղծվում է նոր SliceHeader կառուցվածք՝ այդ դաշտերի կոպիաներով)
Ստեղծում var a [5]int կամ b := [3]string{"a", "b", "c"} var s []int կամ t := []int{1, 2, 3} կամ u := make([]int, 5)
Արժեքների կատարողականություն Ավելի կանխատեսելի՝ ֆիքսված չափսի պատճառով, կարող է ավելի արդյունավետ լինել փոքր չափսերի դեպքում Կարող է ունենալ ավել ծախսեր չափսի փոփոխության ժամանակ (միավոր զանգվածի վերաօտարամտում)
// Զանգվածի օրինակ
var arr [3]int = [3]int{1, 2, 3}

// Զանգվածից ստեղծված սլայսի օրինակ
slice := arr[1:] // slice {2, 3}

// Սլայս ստեղծելու օրինակ
s := []int{10, 20, 30} // ենթակառուցված զանգված {10, 20, 30}, երկարություն = 3, ծավալ = 3

// Սլայսի փոփոխություն
s = append(s, 40) // հիմա s {10, 20, 30, 40}. Եթե ծավալը բավարար չէ, կստեղծվի նոր ենթակառուցված զանգված, երկարություն = 4, ծավալ = 6 (հաճախ կրկնապատկում է ծավալը)

// Էլեմենտի փոփոխությունը սլայսում փոխում է ենթակառուցված զանգվածը
slice[0] = 99 // arr այժմ {1, 99, 3}
fmt.Println(arr)