Sobes.tech
Senior

Agar men slice bilan ishlayotgan bo'lsam, uni funksiya parametr sifatida olsam, unga nimadir qilsa va funksiyadan keyin ham unga ishlashda davom etsam — nima haqida esda tutishim kerak? Tashqaridan qanday o'zgarishlarni ko'rmaymiz?

sobes.tech AI

AIdan javob

Go tilida, dilim (slice) — bu massivga ishora qiluvchi ko‘rsatkich, uzunlik va sig‘imni o‘z ichiga olgan tuzilma. Siz funksiyaga dilimni uzatganingizda, faqat bu tuzilma (ko‘rsatkich, uzunlik, sig‘im) nusxa olinadi, o‘zi massiv emas.

Muhim narsalar:

  • Funksiya ichida dilim elementlarida o‘zgartirishlar (masalan, s[0] = 10) tashqaridan ko‘rinadi, chunki ular bir xil massivga ishora qiladi.
  • Dilimning o‘z tuzilmasida o‘zgartirishlar (masalan, yangi dilim tayinlash s = append(s, 5)) funksiyadan tashqarida dilimga ta’sir qilmaydi, chunki faqat tuzilma nusxa olinadi.

Misol:

func modify(s []int) {
    s[0] = 100       // massiv elementini o‘zgartiradi — tashqaridan ko‘rinadi
    s = append(s, 200) // lokal nusxani o‘zgartiradi — tashqaridan ko‘rinmaydi
}

s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // [100 2 3] chiqadi, 200 qo‘shilishi aks etmaydi

Xulosa qilib aytganda, dilim elementlaridagi o‘zgartirishlar tashqaridan ko‘rinadi, uzunlik yoki sig‘imdagi o‘zgartirishlar (append, slices orqali) esa ko‘rinmaydi, agar yangi dilim qaytarmasangiz yoki ko‘rsatkich uzatmasangiz.