Sobes.tech
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.