Sobes.tech
Junior — Middle

¿Se pueden agregar elementos a un slice pasado como argumento a una función?

sobes.tech AI

Respuesta de la IA

Sí, se pueden agregar elementos a la lista pasada a la función, pero es importante entender que en Go, una lista (slice) es una estructura que contiene un puntero a un array, una longitud y una capacidad.

Si en la función usas append y asignas el resultado a una variable local, los cambios no afectarán a la lista original fuera de la función, a menos que devuelvas una nueva lista o pases un puntero a la lista.

Ejemplo:

func addElement(s []int) []int {
    s = append(s, 42) // agregamos un elemento
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // es necesario reasignar
    fmt.Println(s) // [1 2 3 42]
}

Si quieres modificar la lista dentro de la función sin devolverla, puedes pasar un puntero:

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

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