Let’s Go, Golang Pointer篇

Hank Li
3 min readAug 3, 2018
屏東潮州-林後四林 平地森林園區

初學者在學習Go語言時,遇到Pointer都很頭痛,不容易理解Pointer的概念,今天就要用簡單的圖表及表達方式,解釋什麼是Pointer,Let’s Go!

Pointer基本用法及概念

// 宣告變數
name := “bill”
// 取出變數的位址(address)
namePointer := &name
// 取出指標所指向的記憶體位置的值
name = *namePointer

1. 宣告變數

name := “bill”

在宣告變數時,系統會分配記憶體讓程式暫存,像是上圖,宣告一個變數,名稱叫做”name”,並指向 0xc42007a1c0這個位置,該位置的內容值為”bill”

2. 取出變數的位址(address)

namePointer := &name

宣告一個變數,名稱叫做”namePointer”,並指向0xc42008c018這個位置,該位置的內容值為”0xc42007a1c0”,結構跟變數一模一樣,只是內容值放的是某個記憶體位置.

Hank認為,Pointer也算一種變數型態,該變數型態存放的值是記憶體位置

3. 取出指標所指向的記憶體位置的值

name = *namePointer

有了上述的概念後,自然能容易理解 “取出指標所指向的記憶體位置的值”

真的假的?有沒有程式碼秀一下~

這是一個簡單的Go程式,印出變數、參數的位置(address)及值(value)

思考一下,在Go的function中,參數的傳遞是pass by value,那如果傳遞參數是Pointer會發生什麼事?

執行結果

答案是在function會建立一個新的Pointer,其內容值是namePointer的值,這確實是pass by value,只是該value是一個記憶體位置.

所以透過Pointer的操作還是能夠在function操作scope以外的變數.

結語

Pointer的概念確實不好懂,Hank也是思考了好幾天,才有這些概念,希望能夠幫助喜歡且正在學習Go的朋友

如有任何問題或批評指教,歡迎您告訴我!
請各位給我點掌聲!謝謝各位的觀賞.

--

--