Senior
Агар ман бо слайс кор кунам, онро ҳамчун параметри функсия гирам, бо он кор кунам ва пас аз функсия бо он идома диҳам — ба чӣ бояд ёд орам? Кадом тағйиротҳоро аз берун намебинем?
sobes.tech AI
Ҷавоб аз AI
Го тилида, слайс (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 орқали) — бўлмайди, агар янги слайс қайтарилмаса ёки кўрсаткич ўтказилмаса.