Senior
Ի՞նչ է սլայսը։ Ի՞նչ է սլայսի տակ։ Ինչպե՞ս է աշխատում append ֆունկցիան։
sobes.tech AI
Պատասխան AI-ից
Go-ում սլայսը (slice) դինամիկ զանգված է, որը ներկայացնում է երեք դաշտերով կառուցվածք.
- Մատչելի զանգվածի ցուցիչը (մատչելի զանգվածը հիշողության մեջ)
- Երկարությունը (len) — հասանելի տարրերի քանակը սլայսում
- Հզորությունը (cap) — առավելագույն տարրերի քանակը, որը կարող է տեղավորվել մատչելի զանգվածում ցուցիչից սկսած
Ապակողմից, սլայսը փոքր կառուցվածք է, մոտավորապես այսպես.
type sliceHeader struct {
Data uintptr // ցուցիչ առաջին տարրին
Len int
Cap int
}
append ֆունկցիան ավելացնում է տարրեր սլայսին: Եթե սլայսի երկարությունը փոքր է հզորությունից, append-ը պարզապես գրում է նոր տարրերը մատչելի զանգվածում և մեծացնում է երկարությունը: Եթե երկարությունը հասնում է հզորությանը, append-ը հատկացնում է նոր զանգված ավելի մեծ հզորությամբ (հաճախ կրկնակի), պատճենում է հին տարրերը, ավելացնում նորերը և վերադարձնում է նոր սլայս, թարմացված ցուցիչով:
Օրինակ:
s := []int{1, 2, 3}
s = append(s, 4) // եթե cap(s) > len(s), պարզապես ավելացնում է 4
// եթե cap(s) == len(s), հատկացնում է նոր զանգված, պատճենում [1,2,3], ավելացնում 4
Այսպիսով, append-ը կարող է վերադարձնել նոր սլայս, և կարևոր է վերաօծել արդյունքը։