Nesta aula, aprendemos como usar a função make para criar pedaços (slices) em Go. A função make é uma ferramenta padrão em Go que permite a criação de vetores e pedaços.
Criando um Vetor de Números Inteiros
Definição: Começamos criando um vetor de números inteiros com a instrução:
numeros := make([]int, 5)
Isso cria um vetor com 5 elementos, todos inicialmente definidos como zero.
Estrutura:
O primeiro argumento de make é o tipo do vetor que queremos criar (no caso, []int).
O segundo argumento é o comprimento do vetor (5, neste exemplo), resultando em um vetor de 5 elementos com valor 0.
Referência ao Pedaço: A variável numeros é um pedaço que referencia o vetor criado.
Criando um Pedaço Vazio
Argumento Zero: Se alterarmos o segundo argumento para zero:
numeros := make([]int, 0)
Um pedaço com zero elementos é criado, e o vetor original também não contém elementos.
Tentativa de Alongamento: Ao tentar alongar este pedaço para os índices 0 a 2, resultará em erro já que não há elementos disponíveis.
Adicionando Capacidade
Capacidade e Comprimento:
Se especificarmos capacidade ao criar o pedaço:
numeros := make([]int, 0, 5)
Isso cria um pedaço com zero elementos, mas com uma capacidade de 5.
Referências Válidas: Embora o pedaço inicial tenha comprimento 0, a capacidade permite referenciar até 5 elementos da matriz original se estiverem disponíveis.
Tentativa de Referenciar: Um slice pode ser criado referenciando índices dentro da matriz original:
Por exemplo, numeros[0:2] vai retornar os primeiros dois elementos que são zero, já que a matriz original ainda possui esses valores.
Erros e Limites
Ao tentar acessar índices fora do alcance, como índice 6, ocorrerá um erro de "out of bounds", uma vez que a matriz só possui índices de 0 a 4.
Se a capacidade inicial fosse maior (ex: 6), seria possível acessar isso sem erros.
Conclusão
A função make é uma ferramenta poderosa para manipulação de vetores e pedaços em Go, permitindo definir tanto comprimento quanto capacidade, além de possibilitar o gerenciamento de erros relacionados ao acesso a índices fora dos limites do vetor original.
Video Transcript
Nesta aula nós vamos aprender a fazer pedaços usando a função make.
Então vamos começar.
Então tem essa função chamada make que é WBiotec padrão do gol.
A gente vai usar para criar um pedaço.
Por exemplo, vamos fazer um vetor de números inteiros.
Eu vou dizer números dos pontos igual, vou dizer make.
Essa é a função.
Essa função a gente pode usar para poder criar pedaços.
Vamos dizer que a gente quer criar um pedaço de um vetor de int com 5 elementos.
Vamos ver o que esse cara dá para a gente dar fmt para a gente ler números.
Vamos ver aqui o terminal.
Run.
Aqui o eu disse make.slice.go.
Então tem um vetor de 5 elementos e todos os valores são 0.
Então o que aconteceu aqui?
Você pode usar essa função make para poder criar pedaços.
Mas agora o que acontece quando você usa o make?
O primeiro argumento vai ser o tipo da coisa que você vai criar.
Neste caso é um vetor de inteiros.
O segundo elemento vai ser o comprimento.
Neste caso dá array do vetor que vai ser criado.
Então o make primeiro vai criar um vetor de 5 elementos.
Agora quando ele fizer isso, cada elemento vai ter o seu valor 0.
Então vai estar zerada.
Então cria aquela array de 5 elementos.
Cada elemento vai ter o valor 0.
Neste caso o valor de zero do tipo inteiro é o número 0.
Quando fizer isso o make vai fazer um pedaço que referencia esse vetor que foi criado.
E quando você fala números você está referenciando,
você está usando um pedaço que referencia a array criada pelo make originalmente.
Neste caso é um pedaço de comprimento 5.
Porque está mostrando todos esses caras.
Está bom?
Agora vamos ver outra coisa aqui.
Se você fizer o seguinte,
eu vou mudar esses números aqui e vou botar o zero como segundo argumento.
O que acontece?
Você vai criar um array de zero elementos e vai criar um pedaço.
No que vai dar aqui?
Então esse pedaço tem zero elementos.
Agora o vetor original também tem zero elementos que você disse que tinham zero.
Para confirmar você pode tentar enlongar o pedaço.
Por exemplo, se eu tentar fazer o original do pedaço de zero a dois,
nesse caso não vai funcionar nada.
Deu erro.
Agora o que acontece se eu adicionar aqui no make?
Eu vou adicionar o terceiro argumento e vou dizer sim,
antes que eu que significa isso.
Vamos ver aqui.
Se eu for no terminal e rodar novamente,
você vê que ainda aparece aquela lista vazia.
Mas o que será que aconteceu?
Tem algo diferente?
Olha o que acontece quando eu digo números,
coxete de zero a dois.
É isso, é mágico, não é?
Pareceu dois zeros.
Não, não, não.
Então vamos ver o que aconteceu aqui.
Então o make vai criar,
você está dizendo que por favor criei esse pedaço.
O comprimento do pedaço vai ter zero elementos,
mas a capacidade é cinco.
Opa, a capacidade é cinco.
Então o make vai criar um ray original
que tem cinco elementos.
Cinco elementos.
Então vai ter cinco elementos
e vai ser zerado o valor de cada elemento.
E quando você referenciar o número
que inicialmente é o pedaço vazio,
se você tentar referenciar de zero
até o índice 1, nesse caso, 2 menos 1,
que o 2 não é incluído,
ele vai lá pegar na ray original,
que é aquela ray de capacidade cinco.
Tem cinco elementos na origem,
mas o pedaço que a gente tinha feito
não tem nenhum elemento,
mas a ray ainda tem aquele sentido.
Então você pode enlougar aqui,
criar esse outro pedaço da origem,
da origem,
agora você vai pegar do pedaço que é zero,
que não tem nada, até o 2.
Então vai dar o zero e um,
que é o primeiro e o segundo elemento da ray original.
Tá bom?
Se você tentar fazer de zero a cinco,
ele vai pegar todos os elementos.
Agora, se você tentar seis,
vai dar problema,
porque vai dar aura bounds,
porque não tem elementos de índice cinco,
seis menos um, cinco.
Só tem até do zero até o quatro.
Mas se você tivesse feito capacidade de seis,
quando você fez o pedaço,
a ray original teria seis elementos.
Por isso, quando você enlougar o pedaço de zero a seis,
nesse caso, vai ser pegar os elementos de índice zero
até o índice cinco,
funcionaria normalmente você pegar os seis elementos zerados.
Tá certo?