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:
appendmavjud massivga element qo'shadi, va bu o'zgarishlar funksiyadan tashqarida ham ko'rinadi, chunki asosiy array umumiy. -
Agar sig'im oshirilsa:
appendyangi, 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, agarappendnatijasini 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.