Como Trabalhar com Arrays no Golang
Arrays são uma das estruturas de dados fundamentais para qualquer linguagem de programação. Pois elas armazenam uma coleção de elementos do mesmo tipo, organizados em uma sequência específica. Trabalhar com arrays pode ser essencial para resolver diversos problemas. Então, bora ficar por dentro, de forma detalhada, de como declarar, inicializar, acessar e manipular arrays em Go.
Características dos Arrays
1. Tamanho fixo: O tamanho de um array é determinado na sua criação e não pode ser alterado posteriormente.
2. Tipo homogêneo: Todos os elementos de um array devem ser do mesmo tipo.
3. Indexação baseada em zero: Os elementos são acessados usando índices, começando em zero.
Declaração e Inicialização de Arrays
Declaração de Arrays
Para declarar um array, você deve especificar o tipo dos elementos e o tamanho do array:
var arrayName [size]elementType
Exemplo:
var numbers [5]int
Inicialização de Arrays
Você pode inicializar um array no momento da declaração:
numbers := [5]int{1, 2, 3, 4, 5}
Ou pode inicializar parcialmente, com os elementos restantes assumindo o valor zero padrão do tipo:
numbers := [5]int{1, 2} fmt.Println(numbers) // Imprime: [1 2 0 0 0]
Inicialização de Arrays com Valores Calculados
Go permite inicializar arrays com valores calculados:
squares := [5]int{0: 1*1, 1: 2*2, 2: 3*3, 3: 4*4, 4: 5*5} fmt.Println(squares) // Imprime: [1 4 9 16 25]
Acessando Elementos de um Array
Os elementos de um array são acessados utilizando seus índices:
numbers := [5]int{1, 2, 3, 4, 5} fmt.Println(numbers[0]) // Imprime: 1 fmt.Println(numbers[4]) // Imprime: 5
Você também pode modificar os valores dos elementos:
numbers[0] = 10 fmt.Println(numbers[0]) // Imprime: 10
Arrays Multidimensionais
Go suporta arrays multidimensionais, permitindo a criação de matrizes e outras estruturas complexas:
Declaração de Arrays Multidimensionais
var matrix [3][3]int
Inicialização de Arrays Multidimensionais
matrix := [3][3]int{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, }
Acessando Elementos de Arrays Multidimensionais
Os elementos são acessados usando múltiplos índices:
fmt.Println(matrix[1][2]) // Imprime: 6 matrix[1][2] = 10 fmt.Println(matrix[1][2]) // Imprime: 10
Beleza, agora vamos para parte legal
Iterando sobre Arrays
A iteração sobre arrays é uma operação comum e pode ser realizada utilizando loops:
Usando o Loop for
numbers := [5]int{1, 2, 3, 4, 5} for i := 0; i < len(numbers); i++ { fmt.Println(numbers[i]) }
Usando o Loop for range
O loop
for range
é mais idiomático em Go:for index, value := range numbers { fmt.Println("Index:", index, "Value:", value) }
Funções que Operam em Arrays
Go permite a criação de funções que aceitam arrays como argumentos e retornam arrays. No entanto, você precisa levar em consideração os tamanhos fixos dos arrays.
Exemplo de Função para Somar Elementos de um Array
func Soma(arr [5]int) int { soma := 0 for _, valor := range arr { soma += valor } return soma } func main() { array := [5]int{1, 2, 3, 4, 5} resultado := Soma(array) fmt.Println("A soma dos elementos do array é:", resultado) }
Exemplo de Função para Inverter um Array
func Inverter(arr [5]int) [5]int { for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 { arr[i], arr[j] = arr[j], arr[i] } return arr } func main() { array := [5]int{1, 2, 3, 4, 5} invertido := Inverter(array) fmt.Println("Array invertido:", invertido) }
Passagem de Arrays para Funções
Quando um array é passado para uma função, uma cópia do array é passada, não o array original. Isso significa que modificações feitas no array dentro da função não afetam o array original.
func ModificarArray(arr [5]int) { arr[0] = 100 fmt.Println("Dentro da função:", arr) } func main() { array := [5]int{1, 2, 3, 4, 5} ModificarArray(array) fmt.Println("Fora da função:", array) // O array original permanece inalterado }
Para modificar o array original, você pode passar um ponteiro para o array. E como fazer isso? É muito simples definir, basta adicionar o
*
junto ao tipo do ponteiro:
func ModificarArray(arr *[5]int) { arr[0] = 100 fmt.Println("Dentro da função:", arr) } func main() { array := [5]int{1, 2, 3, 4, 5} ModificarArray(&array) fmt.Println("Fora da função:", array) // O array original é modificado }
Trabalhar com arrays em Go pode parecer simples à primeira vista, mas envolve diversos detalhes que são cruciais para escrever código eficiente e idiomático. Este guia abordou as principais características, métodos de declaração e inicialização, formas de acesso e manipulação, além de práticas recomendadas para o uso de arrays em Go.
Arrays são úteis quando você sabe que o tamanho da coleção de elementos será fixo. Para cenários onde o tamanho pode variar, slices são uma alternativa mais flexível, que serão abordados em outros guias.