Um array é uma sequencia de tamanho fixo de zero ou mais elements
O tamanho de um array faz parte do seu tipo
Arrays são inflexiveis
Fatias (slices)
Uma fatia representa um sequencia de tamanho variavel cujo elementos tem o mesmo tipo.
Uma fatia tem tres elementos:
um ponteiro: aponta para o primeiro elemento do array acessivel pela fatia
tamanho: número de elementos da fatia, não pode exceder a capacidade
capacidade: numero de elementos entre o inicio da fatia e o final do array subjacente
As funções:
len - retorna o tamanho
cap - retorna a capacidade
Uma fatia pode ser extendia além de seu tamanho, mas não além da sua capacidade.
Como uma fatia contém um ponteiro para o array subjacente isso permite que uma função modifique os elementos do array subjacete
Make
Função append
Esta função vai extender o slice caso a capacidade do array subjacente seja suficiente para encaixar os novos elementos, caso contrário é criado um novo array subjacente com capacidade suficiente para encaixar os novos elementos.
Mapas
É uma referência a uma tabela hash, escrito como map[K]V
Requisitos:
Todas as chaves são do mesmo tipo
Todos os valores são do mesmo tipo
Mas as chaves e valores não precisam ser do mesmo tipo
O tipo da chave K deve ser comparavel
Um elemento de mapa não é uma variavels, então não podemos obter seu endereço (adicionar um novo elemento pode alterar os endereços por isso não é possivel acessar o ponteiro)
Não é possivel atribuir valores a um mapa não alocado
ages["carol"] = 21 // pânico: atribuição a uma entrada em um mapa nil
Acessar um elemento do mapa sempre ira retornar um valor, para verificar podemos fazer essa operação:
`age, ok := ages[“bob”]; !ok { //bob não é uma chave nesse mapa
Mudanças nos mapas realizadas por funções serão efetuadas no mapara original sem a necessidade de passar ponteiros. Exemplo:
Estruturas
A estrutura é um tipo de dado que agregra diferentes tipos em uma unica entidade.
Não é possivel acessar campos não exportados em outros pacores
se todos os campos de uma estrutura são comparaveis, então a estrutura é comparável
Campos anônimos
Com o campo anônimo podemos acessar várivaeis correspondentes ao tipo anonimo diretamente na raiz:
Porém para popular os campos na inicialização precisamos declarar os tipos especificados