Sobes.tech
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 append dentro 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.