Sobes.tech
Senior

Kuo skiriasi masyvas ir slice Go kalboje?

sobes.tech AI

Atsakymas iš AI

Go kalboje masyvas (array) yra fiksuoto dydžio struktūra, kurios dydis nustatomas deklaracijos metu ir negali būti keičiamas. Masyvai saugo elementus iš eilės atmintyje ir perduodami funkcijai kopijuojami visą.

Skliaustelis (slice) yra dinaminis, keičiamas pagal dydį tipas, kuris atstovauja nuorodą į eilės eilės masyvo dalį. Skliaustelis turi nuorodą į pirmą elementą, ilgį ir talpą.

Pagrindiniai skirtumai:

  • Masyvo dydis yra fiksuotas, skliaustelis — dinamiškas.
  • Perduodant masyvą, jis kopijuojamas, o skliaustelis perduodamas kaip nuoroda į pagrindinį masyvą.
  • Skliaustelį galima išplėsti (append), masyvą — ne.

Pavyzdys:

var arr [3]int = [3]int{1, 2, 3} // fiksuoto dydžio masyvas

slice := arr[0:2] // skliaustelis, nurodantis į pirmus du masyvo elementus

slice = append(slice, 4) // skliaustelis išplečiamas, galimai sukuriant naują pagrindinį masyvą

Taip, skliausteliai yra naudingi dirbant su dinaminėmis kolekcijomis, o masyvai — fiksuotiems duomenų rinkiniams.