Sobes.tech
Junior — Middle

É possível adicionar elementos a um slice passado como argumento para uma função?

sobes.tech IA

Resposta da IA

Sim, é possível adicionar elementos ao slice passado para a função, mas é importante entender que em Go, um slice é uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade.

Se na função você usar append e atribuir o resultado a uma variável local, as alterações não afetarão o slice original fora da função, a menos que retorne um novo slice ou passe um ponteiro para o slice.

Exemplo:

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

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // é necessário reatribuir
    fmt.Println(s) // [1 2 3 42]
}

Se desejar modificar o slice dentro da função sem retorná-lo, pode passar um ponteiro:

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

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