Senior
Jaka jest różnica między tablicą a slice'em w Go?
sobes.tech AI
Odpowiedź od AI
W języku Go tablica (array) to struktura o stałej wielkości, której rozmiar jest ustalany podczas deklaracji i nie może być zmieniany. Tablice przechowują elementy kolejno w pamięci i podczas przekazywania do funkcji są kopiowane w całości.
Szczypce (slice) to typ dynamiczny, zmienny pod względem rozmiaru, który reprezentuje odwołanie do sekwencyjnego fragmentu tablicy. Szczypce zawierają wskaźnik na pierwszy element, długość i pojemność.
Kluczowe różnice:
- Rozmiar tablicy jest stały, szczypce są dynamiczne.
- Przy przekazywaniu tablica jest kopiowana, szczypce są przekazywane jako odwołanie do underlying array.
- Szczypce można rozszerzać (append), tablice nie.
Przykład:
var arr [3]int = [3]int{1, 2, 3} // tablica o stałym rozmiarze
slice := arr[0:2] // szczypce odwołujące się do pierwszych dwóch elementów tablicy
slice = append(slice, 4) // szczypce się rozszerzają, możliwe jest utworzenie nowego underlying array
W ten sposób, szczypce są przydatne do pracy z kolekcjami dynamicznymi, a tablice do stałych zbiorów danych.