Junior
Goда slices жана массивдердин негизги айырмасы эмнеде?
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:] // слайс {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)