Senior
Եթե ես աշխատում եմ սլայսի հետ, վերցնում եմ որպես ֆունկցիայի պարամետր, ինչ-որ բան անում եմ նրա հետ և հետո շարունակվում եմ նրա հետ աշխատել ֆունկցիայի հետո — ինչին պետք է հիշեմ? Որ փոփոխությունները մենք դուրսից չենք տեսնի?
sobes.tech AI
Պատասխան AI-ից
Go լեզվում, սլայսը (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) — ոչ, եթե չվերադարձնեք նոր սլայս կամ չփոխանցեք ցուցիչ սլայսին։