前面有說到,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/