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