Sobes.tech
Junior — Middle

შესაძლებელია თუ არა ელემენტების დამატება ფუნქციას გადაცემული სლაისში?

sobes.tech AI

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

დიახ, შესაძლებელია ფუნქციას გადაცემული სლაისში ელემენტების დამატება, მაგრამ მნიშვნელოვანია להבין, რომ Go-ში სლაისი (slice) არის სტრუქტურა, რომელიც შეიცავს მაჩვენებელს მასივზე, სიგრძეს და მოცულობას.

თუ ფუნქციაში იყენებთ append-ს და შედეგს მიაწერთ ადგილობრივ ცვლადს, ცვლილებები არ იმოქმედებს ორიგინალურ სლაის გარეთ, თუ მხოლოდ არ დაბრუნებთ ახალ სლაის ან არ გადმოგცემთ სლაისზე მაჩვენებელს.

მაგალითი:

func addElement(s []int) []int {
    s = append(s, 42) // ელემენტის დამატება
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // საჭიროა გადმოგცეთ ისევ
    fmt.Println(s) // [1 2 3 42]
}

თუ გსურთ სლაისში ცვლილებების შეტანა ფუნქციის შიგნით, ისე რომ არ დაბრუნდეთ, შეგიძლიათ გადმოგცეთ მაჩვენებელი:

func addElementPtr(s *[]int) {
    *s = append(*s, 42)
}

func main() {
    s := []int{1, 2, 3}
    addElementPtr(&s)
    fmt.Println(s) // [1 2 3 42]
}