Junior
როგორ მუშაობთ slices-თან Go-ში?
sobes.tech AI
პასუხი AI-სგან
Go-догу слайслар массивтар эмес, негизги массивдин сегментине (же бүтүнө) шилтеме кылат. Бул динамикалык маалымат структуралары.
Слайс түзүү:
- Массивден:
// массивти аныктоо arr := [5]int{1, 2, 3, 4, 5} // бөлүктөн слайс түзүү s1 := arr[1:4] // s1 arr[1], arr[2], arr[3] элементтерин камтыйт s2 := arr[:3] // s2 arr[0], arr[1], arr[2] элементтерин камтыйт s3 := arr[2:] // s3 arr[2], arr[3], arr[4] элементтерин камтыйт s4 := arr[:] // s4 бүт массивге шилтеме makeаркылуу:// узундугу 5 жана капаситети 5 болгон слайс түзүү s := make([]int, 5) // узундугу 5 жана капаситети 10 болгон слайс түзүү s_cap := make([]int, 5, 10)- Литерал:
s := []int{1, 2, 3}
Негизги касиеттер:
len(s): слайстин учурдагы узундугун кайтарат.cap(s): слайстин капаситетин кайтарат (максимум элементтер саны, ал кайра бөлүнбөстөн сакталат).
Элементтерди кошуу (append):
s := []int{1, 2}
s = append(s, 3) // бир элемент кошуу
s = append(s, 4, 5) // бир нече элемент кошуу
s2 := []int{6, 7}
s = append(s, s2...) // башка слайстин элементтерин кошуу
append капаситет жетишсиз болсо, негизги массивдин reallocation болушу мүмкүн.
Элементтерди өчүрүү:
Элементтерди өчүрүү жаңы слайс түзүү аркылуу же көчүрүү аркылуу ишке ашырылат:
s := []int{1, 2, 3, 4, 5}
// индекс i боюнча элементти өчүрүү
i := 2 // 2-инчий элементти өчүрүү (3)
s = append(s[:i], s[i+1:]...)
Слайс көчүрүү:
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // srcден dstге көчүрүү
copy эки слайстын миним узундугун көчүрөт.
Итерация:
s := []string{"a", "b", "c"}
for i, v := range s {
// i - индекс, v - мааниси
}
for i := range s {
// гана индекс
}
for _, v := range s {
// гана мааниси
}
Слайсылар шилтемелүү типтер:
Слайс өзгөртүүлөрү негизги массивге жана башка ошол эле эс тутум аймагына шилтемелүү слайсларга таасир этет:
arr := [5]int{1, 2, 3, 4, 5}
s1 := arr[1:4] // [2, 3, 4]
s2 := arr[2:5] // [3, 4, 5]
s1[0] = 99
// Эми arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (элемент arr[2] өзгөрдү)