Junior — Middle
Jakie dane wewnątrz slice'a są przekazywane podczas wywoływania funkcji z tym slice'em jako argumentem?
sobes.tech AI
Odpowiedź od AI
W Go, zakres (slice) to struktura zawierająca trzy pola: wskaźnik na tablicę, długość i pojemność. Przy przekazywaniu zakresu do funkcji, kopiowana jest tylko ta struktura, a nie cały tablica danych.
To znaczy, że podczas wywołania funkcji, zakres jest przekazywany przez wartość, ale kopiowane są tylko metadane (wskaźnik, długość, pojemność), a nie same elementy tablicy. Oznacza to, że wewnątrz funkcji zakres wskazuje na ten sam podstawowy tablica, i zmiany elementów zakresu wewnątrz funkcji będą widoczne na zewnątrz.
Przykład:
func modify(slice []int) {
slice[0] = 100 // zmienia pierwszy element
}
func main() {
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // wyświetli [100 2 3]
}
W związku z tym, podczas przekazywania zakresu do funkcji, kopiowane są tylko trzy pola struktury zakresu, a dane tablicy pozostają wspólne.