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 аркылуу) — көрүнбөйт, эгер жаңы слайс кайтарбаса же көрсөткүч өткөрбөсө.