DEV Community

Yan.ts
Yan.ts

Posted on

Ponteiros em GO

Introdução

A primeira e vez que ouvi falar em ponteiros foi quando eu estava aprendendo minha primeira linguagem de programação na faculdade C, e eu lembro que foi algo que conseguiu deixar minha mente totalmente bugada e eu levei semanas para entender. De lá para cá esqueci totalmente como funcionavam mas em 2022 estudando o GO ouvi novamente falar de ponteiros e seguindo o Today I Learned resolvi escrever sobre para não esquecer mais

Ponteiros

Quando fazemos uma atribuição de variável no GO por exemplo:

  x := 10
Enter fullscreen mode Exit fullscreen mode

na verdade ele está fazendo uma associação e salvando o valor 10 em um endereço de memoria e ele salva isso como sendo o x, se quisermos pegar esse endereço em que o GO armazenou o valor 10 podemos usar o &x para que o go mostre qual o endereço onde ele armazenou o 10

Go playground

com isso se declaramos uma nova variável por exemplo Y e atribuirmos a ela o valor de &x, significa que ela vai apontar para o mesmo endereço de memoria que X é diferente de qunando por exemplo falamos que z := x

Image description

perceba nos logs que o valor de Y é igual ao endereço de memoria de X mas o endereço de memoria de Y é diferente do de X, enquanto que no Z onde fizemos uma atribuição direta o endereço de memoria de Z é exatamente o mesmo que X

Outra coisa interessante que podemos fazer é, depois de atribuir a Y o endereço de X podemos modificar o valor que Y está apontando com o operador de *y então podemos fazer o seguinte!
Image description

Onde mudamos o valor de X usando apenas Y

E na vida real, quando vamos usar ponteiros?

Image description

sempre que queremos que uma função mude o valor de uma variável que já temos, nesse caso podemos ver q ambas as funções de soma, a somaSemPonteiro e a somaComPonteiro retornam o valor que receberam com 1 a mais, no exemplo é 11, porem só a soma com ponteiro reatribui o valor de x para 11 pois ela pega o local onde x está apontando e muda o valor que ele está apontando, onde antes era 10 passa a ser 11

Discussion (0)