Sobes.tech
Junior — Middle

Czy można dodawać elementy do slice'a przekazanego jako argument do funkcji?

sobes.tech AI

Odpowiedź od AI

Tak, można dodawać elementy do przekazanego do funkcji zakresu (slice), ale ważne jest, aby zrozumieć, że w Go zakres (slice) to struktura zawierająca wskaźnik na tablicę, długość i pojemność.

Jeśli w funkcji używasz append i przypisujesz wynik do lokalnej zmiennej, zmiany nie wpłyną na oryginalny zakres poza funkcją, chyba że zwrócisz nowy zakres lub przekażesz wskaźnik na zakres.

Przykład:

func addElement(s []int) []int {
    s = append(s, 42) // dodaj element
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // trzeba przypisać z powrotem
    fmt.Println(s) // [1 2 3 42]
}

Jeśli chcesz zmodyfikować zakres wewnątrz funkcji bez zwracania, możesz przekazać wskaźnik:

func addElementPtr(s *[]int) {
    *s = append(*s, 42)
}

func main() {
    s := []int{1, 2, 3}
    addElementPtr(&s)
    fmt.Println(s) // [1 2 3 42]
}