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