O uso de structs como matrizes ou vetores é feito da mesma forma que outros tipos de dados. Definimos
suas dimensões utilizando [ e ]. O acesso aos seus elementos é utilizando seus índices ou linha e colunas.
Sintaxe: declaração
var nome_vetor[dimensao] nome_struct
Sintaxe: atribuição
var nome_vetor = [dimensao] nome_struct { elemento1, elemento2, elementoN}
var nome_matriz = [linhas][colunas] nome_struct { {el1, el2 , elN }, //linha 1
{el3, el4 , elN} , //linha 2
{elM, elM, elM} //Linha N
Onde
dimensao: número de elementos
elemento1...N: Elementos do tipo tipo_dado que iniciam nome_vetor
el1...N: Elementos do tipo tipo_dado que iniciam nome_matriz
O acesso aos membros de structs contidos em vetores e matrizes podems ser acessados como na sintaxe abaixo:
Sintaxe: acessando membro
nome_vetor[indice].nome_membro = valor
nome_matriz[linha][coluna].nome_membro = valor
nome_vetor[indice].nome_membro
nome_matriz[linha][coluna].nome_membro
Ao recuperarmos um elementos do tipo struct contido em um vetor ou matriz e posterior alteração de seus membros não
irá refletir no elementos original pois uma cópia foi realizada.
Exemplo 7
package main
import "fmt"
type produto struct {
codigo int
nome string
valor float32
}
func main() {
var produto1 produto = produto{codigo: 1, nome: "prod1", valor: 1.99}
var produto2 produto = produto{codigo: 2, nome: "prod2", valor: 1.99}
lista := [2]produto{produto1, produto2}
matriz := [2][2]produto{{produto1, produto2}, {produto1, produto2}}
lista[0].nome = "produto1"
fmt.Println(lista)
matriz[0][0].nome = "produto2"
fmt.Println(matriz)
}
Saída
[{1 produto1 1.99} {2 prod2 1.99}]
[[{1 produto2 1.99} {2 prod2 1.99}] [{1 prod1 1.99} {2 prod2 1.99}]]
Para iterar elementos de matrizes e vetores os comandos de repetição devem utilizados. Os comandos
de repetição foram vistos em Go: Comandos de repetição,
Go: Vetores e Go: Matrizes.
Exemplo 8
package main
import "fmt"
type produto struct {
codigo int
nome string
valor float32
}
func main() {
var produto1 produto = produto{codigo: 1, nome: "prod1", valor: 1.99}
var produto2 produto = produto{codigo: 2, nome: "prod2", valor: 1.99}
lista := [2]produto{produto1, produto2}
for indice, prod := range lista {
fmt.Println(indice, prod)
}
}
Saída
0 {1 prod1 1.99}
1 {2 prod2 1.99}