Junior — Middle
Jakie zmiany zajdą z fragmentem wewnątrz funkcji, jeśli zostanie przekazany przez wartość, a funkcja zajmuje się sortowaniem i nie zwraca wyniku?
sobes.tech AI
Odpowiedź od AI
W języku Go slices są przekazywane do funkcji przez wartość, ale ważne jest, aby zrozumieć, że wartość slice’a to struktura zawierająca wskaźnik na tablicę, długość i pojemność. Przy przekazywaniu slice’a przez wartość, kopiowana jest właśnie ta struktura, a nie sama tablica danych.
Jeśli funkcja sortuje slice przekazany przez wartość i nie zwraca wyniku, zmiany będą widoczne również na zewnątrz, ponieważ wskaźnik wewnątrz slice’a wskazuje na ten sam tablicę danych.
Przykład:
func sortSlice(s []int) {
sort.Ints(s) // sortuje slice
}
func main() {
nums := []int{3, 1, 2}
sortSlice(nums)
fmt.Println(nums) // Wypisze: [1 2 3]
}
W ten sposób, sortowanie wewnątrz funkcji zmieni oryginalną tablicę, nawet jeśli slice jest przekazywany przez wartość, ponieważ kopiowana jest tylko struktura slice’a, a nie dane tablicy.