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]
}