Junior — Middle
თუ ნიმუშს ფუნქციას პინჩერის გარეშე გადავცემთ, ეს გავლენას მოახდენს ორიგინალ მასივზე?
sobes.tech AI
პასუხი AI-სგან
Go-ში სლაისი (slice) არის სტრუქტურა, რომელიც შეიცავს მითითებას მასივზე, სიგრძეს და მოცულობას. როდესაც თქვენ სლაის გადმოყავთ ფუნქციას მითითებლის გარეშე, თავად სლაის სტრუქტურა იკოპირებს, მაგრამ ქვედა მასივი — არა.
ეს ნიშნავს, რომ ფუნქციის შიგნით სლაის ელემენტების ცვლილებები გავლენას მოახდენს ორიგინალურ მასივზე, რადგან ორივე სლაისი მიუთითებს ერთსა და იმავე მასივზე. თუმცა, თუ ფუნქციის შიგნით შეცვლით სლაის (მაგალითად, ახალი სლაის მიანიჭებთ ან მისი სიგრძე შეცვალეთ), ეს ცვლილებები არ იმოქმედებს ფუნქციის გარეთ არსებულ სლაისზე.
მაგალითი:
func modifySlice(s []int) {
s[0] = 100 // შეცვლის ორიგინალურ მასივს
s = append(s, 200) // შეცვლის ადგილობრივ სლაის, არ იმოქმედებს გარე
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // გამოიტანს [100 2 3]
}
საჯამო: სლაის გადაცემა მითითებლის გარეშე საშუალებას აძლევს შეცვალოს ორიგინალური მასივის ელემენტები, მაგრამ არ აძლევს შეცვალოს სლაისი (მისი სიგრძე, მითითებელი) ფუნქციის გარეთ.