Sobes.tech
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 орқали) — бўлмайди, агар янги слайс қайтарилмаса ёки кўрсаткич ўтказилмаса.