Matrice
Matricile reprezintă o secvență de elemente de același tip. Un aranjament se definește astfel:
var numbers [numărul_elementelor]tip_elementelor
De exemplu, un aranjament cu cinci elemente de tip int:
var numbers [5]int
La această definiție, toate elementele aranjamentului sunt inițializate cu valorile implicite. Totuși, este posibil să inițializăm elementele aranjamentului cu alte valori:
var numbers [5]int = [5]int{1,2,3,4,5}
Valorile sunt transmise între acolade, separate prin virgulă. În acest caz, nu pot fi mai multe valori decât lungimea aranjamentului. În acest exemplu, lungimea aranjamentului este 5, așa că nu putem defini mai mult de cinci elemente între acolade. Dar putem specifica mai puține elemente:
var numbers [5]int = [5]int{1,2}
fmt.Println(numbers) // [1 2 0 0 0]
În acest caz, elementele pentru care nu s-au specificat valori vor avea valoarea lor implicită.
De asemenea, putem utiliza o definire scurtă a aranjamentului:
numbers := [5]int{1,2,3,4,5}
Dacă în loc de lungime se folosește punctele de suspensie, atunci lungimea aranjamentului este determinată pe baza numărului de elemente transmise acestuia:
var numbers = [...]int{1,2,3,4,5} // lungimea aranjamentului 5
numbers2 := [...]int{1,2,3} // lungimea aranjamentului 3
fmt.Println(numbers) // [1 2 3 4 5]
fmt.Println(numbers2) // [1 2 3]
În acest caz, lungimea aranjamentului este parte din tipul său. De exemplu, următoarele două aranjamente reprezintă tipuri de date diferite, deși ele stochează date de același tip:
var numbers [3]int = [3]int{1, 2, 3}
var numbers2 [4]int = [4]int{1, 2, 3, 4}
numbers = numbers2 // ! Eroare
În acest caz, vom obține o eroare la atribuire, deoarece încercăm să atribuim un aranjament de un tip unei variabile de alt tip.
Indici
Pentru a accesa elementele unui aranjament, se folosesc indicii - numerele elementelor. Numerotarea începe de la 0, adică primul element va avea indicele 0. Indicele se specifică între paranteze pătrate. Putem obține valoarea unui element sau o putem modifica folosind indicele:
package main
import "fmt"
func main() {
var numbers [5]int = [5]int{1,2,3,4,5}
fmt.Println(numbers[0]) // 1
fmt.Println(numbers[4]) // 5
numbers[0] = 87
fmt.Println(numbers[0]) // 87
}
Indici în aranjament funcționează efectiv ca niște chei prin care putem accesa valorile corespunzătoare. De asemenea, putem specifica explicit ce valoare va corespunde fiecărei chei. Indicii numerici nu trebuie să fie neapărat în ordine crescătoare:
colors := [3]string{2: "blue", 0: "red", 1: "green"}
fmt.Println(colors[2]) // blue