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]
}