Let’s Go, Golang Pointer篇

屏東潮州-林後四林 平地森林園區

初學者在學習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的朋友

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

--

--

--

Shares Android development and Kotlin programming.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Hank Li

Hank Li

Shares Android development and Kotlin programming.

More from Medium

Learning Go in 3 minutes

Golang Generics Implementation Details

Learn Go: Structs

What’s so cool about golang