Sobes.tech
Junior — Middle

Go-ში სლაისთან მუშაობისას, თუ ის მკაფიოდ არ არის ინიციალიზებული, რა მოქმედებებია შესაძლებელი?

sobes.tech AI

პასუხი AI-სგან

Go-ში, თუ სლაისი (slice) არ არის აშკარად ინიციალიზებული (ანუ, აქვს მნიშვნელობა nil), შესაძლებელია შემდეგი მოქმედებების განხორციელება:

  • შემოწმება, არის თუ არა nil (მაგალითად, if slice == nil), რაც სასარგებლოა იმის განსაზღვრაში, არის თუ არა სლაისი ინიციალიზებული.
  • სიგრძის და მოცულობის მიღება len(slice) და cap(slice)-ის გამოყენებით. nil-სლაის სიგრძე და მოცულობა 0-ია.
  • ელემენტების დამატება append ოპერატორის გამოყენებით. append ავტომატურად შექმნის ახალ სლაის მეხსიერების განაწილებით, თუ თავდაპირველი სლაისი nil-ია.

თუმცა, არ შეიძლება წვდომა სლაის ელემენტებზე ინდექსით, თუ ის nil ან ცარიელია, რადგან ეს გამოიწვევს პანიკას.

მაგალითი:

var s []int // s == nil
fmt.Println(s == nil) // true
fmt.Println(len(s))   // 0
s = append(s, 1)      // ახლა s ინიციალიზებულია და შეიცავს [1]