Sobes.tech
Senior

Aký je rozdiel medzi poľom a rezom v Go?

sobes.tech AI

Odpoveď od AI

V jazyku Go je pole (array) štruktúra s pevnou veľkosťou, ktorej veľkosť sa stanoví pri deklarácii a nemôže sa meniť. Polia ukladajú prvky po sebe v pamäti a pri odovzdaní funkcii sa kopírujú celý.

Reze (slice) je dynamický, meniaci sa typ, ktorý predstavuje odkaz na sekvenčný úsek poľa. Reze obsahuje ukazovateľ na prvý prvok, dĺžku a kapacitu.

Kľúčové rozdiely:

  • Veľkosť poľa je pevná, reze je dynamický.
  • Pri odovzdaní sa pole kopíruje, reze sa odovzdáva ako odkaz na základné pole.
  • Reze je možné rozšíriť (append), pole nie.

Príklad:

var arr [3]int = [3]int{1, 2, 3} // pevná veľkosť poľa

slice := arr[0:2] // reze odkazujúci na prvé dva prvky poľa

slice = append(slice, 4) // reze sa rozšíri, prípadne sa vytvorí nové základné pole

Takto sú rezy užitočné pre prácu s dynamickými kolekciami, zatiaľ čo polia sú vhodné pre pevné dátové súbory.