DEV Community

William Mateus Duarte
William Mateus Duarte

Posted on

Ponteiros em Golang

#go

Ponteiros me lembra o primeiro e segundo semestre da faculdade, ao aprender algoritmos e estruturas de dados em C. Eles eram a principal dor de cabeça em meus estudos. Algumas linguagens como Java, C/C++ e o Go têm conceitos de ponteiros, que permitem manipular variáveis na forma de endereço de memória. O ponteiro talvez não seja o conteúdo mais importante de Golang, mas é usado em quase todo o seu código, se você estiver trabalhando em um projeto Go com alto desempenho e padrão.

Os ponteiros no mundo real

Podemos relacionar os ponteiros das linguagens de programação com o mundo real, de forma análoga. Atualmente está popular a entregas online, que pela comodidade receber em casa se torna atrativa. Pense é mais fácil passar o endereço da sua casa para o entregador, do que sua casa ir até o entregador. O problema é se você enviar o endereço errado. Você não receberá a sua encomenda.

Voltando ao mundo da Programação

Digamos que exista uma variável e ela seja usada em várias funções ao mesmo tempo. Você deseja que ele seja atualizado automaticamente sempre que alguma função alterar seu valor para permitir que outras pessoas possam obter o novo valor. Ponteiro é o conceito que pode resolver essa situação.

package main

import "fmt"

func main() {
  x := 0
  y := 0
  fmt.Printf("Antes:\tx=%d\ty=%d\n", x, y)
  atualizando(x, &y)
  fmt.Printf("Depois:\tx=%d\ty=%d\n", x, y)
}

func atualizando(x int, y *int) {
  x = 10
  *y = 10
  fmt.Printf("inside:\tx=%d\ty=%d\n", x, *y)
}

/*
>>> Saída <<<
Antes:  x=0  y=0
Dentro da função: x=10 y=10
Depois: x=0  y=10
*/

No exemplo assim podemos ver, que os valores após passar pela função atualizando, ficaram o seguinte x permaneceu o mesmo e o y atualizou. Isso acontece pelo fato de x ser passado como valor e y como referência. Mas a diferença é antes de passar y para a função de atualizando, ela é convertida em ponteiro e enviada para a função. Portanto, a função obterá o endereço de memória de y e o utilizará para alterar o valor de y diretamente.

Top comments (1)

Collapse
 
paulo9mv profile image
Paulo Viana

ótimo artigo, parabéns!