Junior — Middle
Como aumentar o tamanho do segmento passado para uma função numa linguagem de programação?
sobes.tech IA
Resposta da IA
Em Go, um slice é uma estrutura que contém um ponteiro para um array, um comprimento e uma capacidade. Se precisar aumentar o tamanho de um slice passado para uma função, pode fazer o seguinte:
- Passar o slice por valor, mas criar um novo slice com comprimento ou capacidade aumentados usando a função
appenddentro da função. - Se precisar modificar o próprio slice (por exemplo, aumentar o comprimento) e que as alterações sejam visíveis fora, pode passar um ponteiro para o slice (
*[]T), assim dentro da função pode reatribuir o slice.
Exemplo de aumento de um slice dentro de uma função retornando um novo slice:
func extendSlice(s []int, n int) []int {
// Adiciona n elementos nulos
s = append(s, make([]int, n)...)
return s
}
func main() {
s := []int{1, 2, 3}
s = extendSlice(s, 2)
fmt.Println(s) // [1 2 3 0 0]
}
Se a função deve modificar o slice sem retorná-lo, pode usar um ponteiro:
func extendSlicePtr(s *[]int, n int) {
*s = append(*s, make([]int, n)...)
}
func main() {
s := []int{1, 2, 3}
extendSlicePtr(&s, 2)
fmt.Println(s) // [1 2 3 0 0]
}
Dessa forma, para aumentar o tamanho do slice dentro de uma função, você deve retornar um novo slice ou passar um ponteiro para o slice.