Junior
Go'da slices va massivlar o'rtasidagi asosiy farq nima?
sobes.tech AI
AIdan javob
Slice — bu o'zgaruvchan massivlar ko'rinishidir.
| Xususiyat | Array | Slice |
|---|---|---|
| Hajm | Fiksir, yaratilganda aniqlanadi | Dinamik, o'zgarishi mumkin |
| Tip | [n]T (bu yerda n hajm, T tip) |
[]T (bu yerda T tip) |
| Funktsiyalarga o'tkazish | Qiymat bilan (nusxa) | Asosiy arrayga havola bilan, head, len va cap o'tkaziladi (aslida, bu maydonlarning nusxalarini o'z ichiga olgan yangi SliceHeader tuzilmasi yaratiladi) |
| Yaratish | var a [5]int yoki b := [3]string{"a", "b", "c"} |
var s []int yoki t := []int{1, 2, 3} yoki u := make([]int, 5) |
| Ishlash tezligi | Fiksir hajm tufayli oldindan belgilangan, kichik hajmlarda samarali bo'lishi mumkin | Hajm o'zgarishlarida qo'shimcha xarajatlar bo'lishi mumkin (asosiy arrayni qayta ajratish) |
// Array misoli
var arr [3]int = [3]int{1, 2, 3}
// Arraydan yaratilgan slice misoli
slice := arr[1:] // slice {2, 3}
// Slice yaratish misoli
s := []int{10, 20, 30} // asosiy array {10, 20, 30}, uzunligi = 3, imkoniyati = 3
// Slice ni o'zgartirish
s = append(s, 40) // endi s {10, 20, 30, 40}. Agar imkoniyat yetmasa, yangi asosiy array yaratiladi, uzunligi = 4, imkoniyati = 6 (odatda imkoniyat ikki barobar oshiriladi).
// Slice elementini o'zgartirish asosiy arrayni o'zgartiradi
slice[0] = 99 // arr endi {1, 99, 3}
fmt.Println(arr)