Junior
Тафовутҳои асосии байни slices ва массивҳо дар Go чист?
sobes.tech AI
Ҷавоб аз AI
Слайсҳо — динамикӣ тағйирбўлмайдиган массивлар кўринишидир.
| Хусусият | Массив (Array) | Слайс (Slice) |
|---|---|---|
| Ўлчам | Мустаҳкам, яратишда белгиланади | Динамик, ўзгариши мумкин |
| Тип | [n]T (бу ерда n ўлчам, T тури) |
[]T (бу ерда T тури) |
| Функцияларга ўтказиш | Қиммати бўйича (нусха) | Асосий массивга ҳавола бўйича, head, len ва cap ўтказилади (асlда, бу майдонларнинг нусхаларини ўз ичига олган янги 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:] // слайс {2, 3}
// Слайс яратиш мисоли
s := []int{10, 20, 30} // асосий массив {10, 20, 30}, узунлиги = 3, ҳажми = 3
// Слайсни ўзгартириш
s = append(s, 40) // ҳозир с {10, 20, 30, 40}. Агар ҳажм етмайдиган бўлса, янги асосий массив яратилади, узунлиги = 4, ҳажми = 6 (одатда икки баробар кўпайтирилади).
// Элементни ўзгартириш слайсда асосий массивни ўзгартириб қўяди
slice[0] = 99 // arr ҳозир {1, 99, 3}
fmt.Println(arr)