iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Modern Web

golang後端入門分享系列 第 12

Day12-指標Pointer

前言

前面有說到,Go 語言承襲了許多 C 語言的傳統,在指摽上也不例外,指標對 C 語言來說是學習必經的門檻,只是在 Go 語言裡的指標,運用比較簡單,沒有指標的運算,也不需要手動控制記憶體釋放。

建立指標

指標本身存的值是指向在另一個記憶體位置,我們通常不會直接使用指標裡的值,而是透過指標指向的記憶體位置,間接操作記憶體位置裡的值,我們下面示範建立一個指標:

package main
import (
   "fmt"
)
func main() {
   n := 2
   // 將變數存入地址
   nPtr := &n
   // 印出儲存變數的地址
   fmt.Println(nPtr)
}

可以自己試試看執行程式碼,印出來的會是一組以十六組進位表示的記憶體位址,透過 & 取出 n 的記憶體位址。那要取 n 值,該怎麼做呢?必須使用 * 符號來取記憶體位址種的值:

package main
import (
   "fmt"
)
func main() {
   n := 2
   // 將變數存入地址
   nPtr := &n
   // 印出記憶體位址中的變數
   fmt.Println(*nPtr)
}

動態配置記憶體

Go 語言也可以動態配置記憶體位至,看一下以下的例子:

package main
import (
   "fmt"
)
func main() {
   // 分配記憶體
   nPtr := new(int)
   // 賦於記憶體一個值
   *nPtr = 2
   // 印出記憶體位址
   fmt.Println(nPtr)
}

new 這個方式是先分配記憶體,類似一種初始化,再將值寫入,動態配置適合用於操作大量且不固定的記憶體空間,與make相比,make 回傳的不是指標,而是該值別本身。

結語

今天簡單說明了指標的概念,以及 Go 語言的指標用法。在 Go 裡面,當變數比較大時,傳遞指標較傳遞整個變數有效率得多。 Go 語言裡的指標,,沒有指標的運算,也不需要手動控制記憶體釋放,所以相較 C 語言,簡化許多。謝謝今天的閱讀!

參考來源

https://opensourcedoc.com/golang-programming/pointer/


上一篇
Day11-Go映射map
下一篇
Day13-Go方法method
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言