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) — არა, თუ არ დაბრუნებთ ახალ სლაის ან არ გადმოიცით მაჩვენებელი სლაის.