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