Sobes.tech
Senior

Слайс деген эмне? Слайстин капотунун астында эмне бар? append функциясы кантип иштейт?

sobes.tech AI

AIден жооп

Goда, слайс — бул динамикалык массив, ал үч талаасынан турган структураны билдирет:

  • Массивге ишара (жерде турган массив)
  • Узундук (len) — слайста жеткиликтүү элементтердин саны
  • Капаситет (cap) — ишарадан баштап, негизги массивтин эң көп сандаган элементтерди камтый алчу көлөмү

Карап турганда, слайс — бул кичинекей структура, болжол менен мындай:

type sliceHeader struct {
    Data uintptr // биринчи элементке ишара
    Len  int
    Cap  int
}

append функциясы слайсга элементтер кошот. Эгер слайстын узундугу капаситеттен кичине болсо, append жөн эле жаңы элементтерди негизги массивге жазып, узундугун көбөйтөт. Эгер узундук капаситетке жетсе, append жаңы, көбүрөөк капаситет менен массив бөлүп, эски элементтерди көчүрүп, жаңы элементтерди кошуп, жаңыланган ишара менен жаңы слайс кайтарат.

Мисал:

s := []int{1, 2, 3}
s = append(s, 4) // cap(s) > len(s) болсо, жөн эле 4 кошот

// cap(s) == len(s) болсо, жаңы массив бөлүп, [1,2,3] көчүрүп, 4 кошот

Мындай жол менен, append жаңы слайс кайтаруусу мүмкүн, жана натыйжаны кайра белгилөө маанилүү.