Sobes.tech
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] өзгөрдү)