DEV Community

William Mateus Duarte
William Mateus Duarte

Posted on

4 3

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.

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (1)

Collapse
 
paulo9mv profile image
Paulo Viana

ótimo artigo, parabéns!

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay