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 { <lista_elementos> }
var nome_matriz = [<linhas>][<colunas>] nome_struct { {<lista_elementos> }, //linha 1
{<lista_elementos>} , //linha 2
{<lista_elementos>}} //Linha N
//inferência
Onde
<dimensao>: número de elementos do array
<linhas/colunas>: dimensões da 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 elemento 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.
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}