Sobes.tech
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-ը կարող է վերադարձնել նոր սլայս, և կարևոր է վերաօծել արդյունքը։