Um momento
Aula 45
Cursos / Aprenda Go / Golang (Curso de Programação)
Ponteiros para Struct na Linguagem Golang - Aula de Go

Summary

# Resumo da Aula: Criando Ponteiros para Estruturas em Go

Nesta aula, aprendemos sobre a criação e manipulação de ponteiros para estruturas em Go. Abaixo, seguem os principais tópicos abordados:

## Estrutura Definida
- Criamos uma estrutura chamada `posição` com dois campos: `x` e `y`, ambos do tipo `int`.
- Definimos uma variável `p.o.s` do tipo `posição` utilizando um literal da estrutura com valores 47 e 81.

## Criação de Ponteiros
- Criamos um ponteiro para a estrutura `posição`. Para isso, definimos uma variável do tipo ponteiro (`*posição`), que aponta para a variável `p.o.s` usando o operador `&`.

## Acesso e Modificação de Valores
- Para acessar o valor de `x` através do ponteiro, utilizamos a desreferenciação, colocando um asterisco (`*`) antes do ponteiro, seguido pelo campo desejado (ex: `(*k).x`).
- Para modificar o valor de `y` através do ponteiro, utilizamos a mesma abordagem com a desreferenciação:
  ```go
  *k.y = 33
  • Verificamos que a alteração do valor de y na estrutura original p.o.s foi efetiva.

Notação Simplificada

  • Em Go, não é necessário usar a desreferenciação explícita ao acessar campos de um ponteiro. É possível acessar diretamente com a notação de ponto, como em k.y.
  • A linguagem permite essa simplificação, mas é importante lembrar que k é um ponteiro e não uma estrutura.

Conclusão

Nesta aula, entendemos como:

  1. Criar um ponteiro para uma estrutura usando o asterisco (*) para declaração.
  2. Utilizar a desreferenciação para acessar e modificar campos de uma estrutura através do ponteiro.
  3. Aproveitar a notação simplificada que Go oferece.

Por hoje é só. Até a próxima!

Video Transcript

Nesta aula vamos falar de criar ponteiros para structuras. A gente vai criar ponteiros, isto é uma variável armazenal em endereço, e este endereço vai apontar para um structura. Temos aqui a estrutura posição com dois campos x e y, ambos de tipo int. Vamos criar uma variável em baixo, var, p.o.s, de tipo posição, e vou definir este cara com o struct literal, posição com valores 47 e 81. Agora vou criar um ponteiro aqui. Vamos ver o que acontece aqui. Vou criar var, vou chamar este cara de... Vamos ver aqui. Chama este cara de cá. E este cara aqui vai ter aqui tipo. Eu quero que seja um ponteiro que aponte para uma posição. Eu sei que o tipo de posição é posição dessa maneira, mas se eu quiser fazer um ponteiro, tenho que pôr um artesarisco antes deste cara. Então este tipo aqui significa aponteiro para uma posição. E para poder iniciar o valor, eu vou dar o endereço da variável p.o.s, que mantém a posição aqui, a estrutura. Dessa maneira, eu posso agora pegar este ponteiro cá. Se eu dar o fmt println, vamos ver o que aqui dá. Vamos ver aqui. Vou run struct 3, do gol. Então olha aqui, ele fala que é o endereço deste cara aqui. Ele está até apontando e mostrando o valor da struct apontada pelo ponteiro. Legal. Agora, como é que a gente faz, por exemplo, para poder acessar o valor de x apontado pelo ponteiro? Bem, a gente pode usar a disreferênciação de reference, põe o artesarisco antes do cá. Dessa maneira aqui, você põe o artesarisco dentro do cá, vou botar o parântese entre eles, p.x, tá? Se eu pôe dessa maneira aqui, se eu pôe a linha aqui para você não confundir, que eu estou escrevendo essa parte aqui. Então eu ponho o artesarisco cá para disreferência. Este ponteiro vai pegar o valor apontado, que neste caso, esta posição 4781, vai pegar deste valor apontado o campo x, p.x, neste caso, 47. A mesma coisa funcionaria para y, né? Tá certo? E se você quiser, por exemplo, modificar o valor de y, eu poderia falar, pego o ponteiro, disreferência com o artesarisco antes, pego este cara, eu quero o ponto y, quero mudar, eu uso o operador de atribuição, por exemplo, mudar y para 33. E ele vai mudar o y para 33, tá? Quando der o println, vai aparecer 33. Note que vai realmente mudar porque se eu pôe, em vez deste cara aqui, eu quero pos ponto y, em vez do ponteiro, para ver se realmente mudou o valor que o p0eOS está armazenando. Então, ele realmente mudou, 33 ainda está lá no p0s, então mudou o p0s, valor y. Tá? Agora, para concluir aqui, na linguagem go, ela permite que você use a disreferência em please, em sentido que você não precisa pôr o artesarisco antes do ponteiro para a struct. Então, neste caso aqui, por exemplo, eu posso até fazer o ponteiro ponto itl, já diretamente, que ele vai automaticamente pegar o ponteiro, disreferenciar e usar, modificar aquele valor, tá? Se eu fizer essa maneira, vamos ver se o p0eOS ponto itl muda. Mudou do mesmo jeito, sem nenhum erro. Tá? Da mesma maneira que você quiser modificar, pode também a imprimir. Então, se eu tiver aqui no println, eu quiser, em vez de fazer o parentes.artesarisco.k.y, aí eu posso tirar o parentes e o artesarisco e pôr k.y, tá? Funciona da mesma maneira. Mas, tomar muito cuidado, porque neste caso, o k ele não é uma estrutura, o k é um ponteiro para uma struct, tá? Um ponteiro para um struct, tá? Então, cuidado com isso. Então, vamos dar um revisário que a gente aprendeu. Nesta aula, aprendemos a criar um ponteiro para uma struct. A maneira de fazer isso é, é só falar um variável, o nome da variável, e no tipo, a gente põe o tipo do struct, aí tem que prefixar com o asteris para dizer que esse cara, esse variável, é do tipo ponteiro para posição, para struct. A gente aprendeu a desreferenciar usando o asterisco, normalmente a gente usa isso para qualquer ponteiro, e se quiser acessar o campo de um ponteiro que aponta para uma struct, é só usar essa notação aqui. Mas aí, a gente aprendeu que também funciona, sem usar a desreferenciação explícita, isto é, ele vai, o gol ele permite remover esses asteris que os parentes, para poder ir automaticamente, ele vai desreferenciar para você. Então, cuidado porque cá, na sua, caso, é uma variável que mantém um, de tipo ponteiro para posição, não é uma posição, tá? Então, por essa aula é só, e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: