👨🏻💻 Olá pessoal!
Precisamos conversar sobre Slices em Go!
Quem começou a estudar Go deve ter noção de que nessa linguagem, os slices tem papel mais importante do que os arrays como entidade de armazenamento de dados.
Na prática, o programador vai lidar o tempo todo com slices, enquanto os arrays são criados de forma subjacente pela linguagem.
Trabalhar com slices é fácil. É algo bem parecido com o que fazemos em outras linguagens de programação, mas não se engane: existem diferenças importantes que se desconsideradas, podem trazer grandes dores de cabeça.
Hoje vou mostrar uma dessas diferenças que é uma verdadeira Pegadinha do Malandro para os mais desavisados.
Acompanhe o raciocínio no código comentado abaixo:
package main
import "fmt"
func main() {
// Criamos primeiro slice com dados
primeiroSlice := []string{"a", "b", "c", "d", "e"}
// Mostramos primeiro slice [a b c d e]
fmt.Println(primeiroSlice)
// Criamos segundo slice usando itens do primeiro slice: [a d e]
segundoSlice := append(primeiroSlice[:1], primeiroSlice[3:]...)
// Mostramos segundo slice [a d e]
fmt.Println(segundoSlice)
// Mostramos novamente primeiro slice [a d e d e]
// Como mudou o primeiro slice se ele não foi alterado?
fmt.Println(primeiroSlice)
// Explicação - Pegadinha do malandro:
// Ao criar o segundo slice Go refatia (refaz)
// o primeiro array/slice subjacente.
// Licão: Cuidado ao trabalhar com Slices.
}
Se você não acredita, basta rodar esse código em sua máquina.
É isso aí! Agora que você já sabe, abre o olho:
Muito cuidado ao usar slices.
Este tipo de coisa não ensinam nos bootcamps da vida!
