Sobes.tech
Middle+

Agar slice ni funksiyaga o'tkazib bersangiz va unga yangi element qo'shsangiz, o'zgarishlar funksiyadan tashqarida ko'rinadimi? Agar capacity oshmay qolsa?

sobes.tech AI

AIdan javob

Go'da, dilim (slice) — bu, massivga ishora qiluvchi, uzunligi va sig'imi bo'lgan tuzilma.

Agar siz dilimni funksiyaga uzatsangiz va unga append yordamida yangi element qo'shsangiz, xulq-atvor hozirgi sig'imga bog'liq:

  • Agar sig'im oshirilmasa: append mavjud massivga element qo'shadi, va bu o'zgarishlar funksiyadan tashqarida ham ko'rinadi, chunki asosiy array umumiy.

  • Agar sig'im oshirilsa: append yangi, kengaytirilgan sig'imli massiv yaratadi, ma'lumotlarni ko'chiradi va yangi dilimni qaytaradi. Funksiya ichida bu yangi dilim bo'ladi, lekin funksiyadan tashqarida, asl dilim o'zgarmaydi, agar append natijasini qayta tayinlamasangiz.

Misol:

func addElement(s []int) {
    s = append(s, 10) // agar sig'im oshirilmasa, aynan shunday massivga qo'shadi
}

func main() {
    s := make([]int, 0, 5) // sig'im 5
    addElement(s)
    fmt.Println(s) // [] — o'zgartirishlar yo'q, chunki `append` yangi dilim qaytardi, uni saqlamadik

    s = append(s, 1, 2, 3)
    s = append(s, 4) // sig'im oshirilmaydi
    addElement(s)
    fmt.Println(s) // [1 2 3 4 10] — o'zgartirishlar ko'rinadi
}

Xulosa: funksiyadan tashqarida o'zgarishlar ko'rinishi uchun, sig'im oshmasligiga ishonch hosil qilish yoki append natijasini qaytarib, unga tayinlash kerak.