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