Sobes.tech
Senior

Эгер мен slice менен иштеп жатсам, аны функциянын параметри катары алсам, анын менен бир нерсе жасасам жана функциядан кийин дагы иштесем — эмне жөнүндө эс тутумда сакташым керек? Кайсы өзгөрүүлөрдү сырттан көрө албайбыз?

sobes.tech AI

AIден жооп

Go тилинде, слайс (slice) — бул структура, ал массивке ишара кылган көрсөткүч, узундук жана сыйымдуулук камтыйт. Сиз слайсды функцияга өткөргөндө, гана бул структура (ишара, узундук, сыйымдуулук) көчүрүлөт, массив өзү эмес.

Маанилүү нерселер:

  • Функциянын ичинде слайс элементтериндеги өзгөртүүлөр (мисалы, s[0] = 10) сырттан көрүнөт, анткени алар бир эле массивге ишарат кылат.
  • Слайс структурасынын өзү боюнча өзгөртүүлөр (мисалы, жаңы слайс берүү s = append(s, 5)) функциядан тышкары слайска таасир этпейт, анткени гана структура көчүрүлөт.

Мисал:

func modify(s []int) {
    s[0] = 100       // массивдин элементин өзгөртөт — сырттан көрүнөт
    s = append(s, 200) // жергиликтүү көчүрмөсүн өзгөртөт — сырттан көрүнбөйт
}

s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // [100 2 3] чыгат, 200 кошулушу көрүнбөйт

Жыйынтыктап айтканда, слайс элементтериндеги өзгөртүүлөр сырттан көрүнөт, ал эми узундук же сыйымдуулуктагы өзгөртүүлөр (append, slices аркылуу) — көрүнбөйт, эгер жаңы слайс кайтарбаса же көрсөткүч өткөрбөсө.