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)
ótimo artigo, parabéns!