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.