Golang 基礎 Go 語言的指標

2021-08-28 18:05:19 字數 1141 閱讀 5017

變數是一種使用方便的佔位符,用於引用計算機位址,而在 go 語言中可以通過&符號獲取乙個變數在計算機中對應的記憶體位址。

package basic

import

"fmt"

func

main()

乙個指標變數指向了乙個值的記憶體位址。go 語言中的指標語法與 c++ 類似,都是使用*符號宣告指標變數;

package basic

import

"fmt"

func

main()

go 語言雖然有指標,但是沒有指標算數,不能對其進行加減,但可以把指標值賦給另乙個指標。這也就是 golang 中的指標與 c++ 中指標的最大區別

可以通過將unsafe.pointer轉換為uintptr,然後做變相指標運算。uintptr可以轉換為整數。

在學習引用型別語言時,我們首先要搞清楚,當給乙個函式/方法傳參的時候,使用的是指傳遞還是引用傳遞。實際上,大部分引用型別語言,引數為基本型別時,使用的是值傳遞。也就是另外複製了乙份引數到當前的函式呼叫棧。引數為高階型別時,使用的是引用傳遞。這個主要是因為虛擬機器的記憶體管理導致的。

記憶體管理中的記憶體區域一般包括 堆(heap) 和 棧(stack) 主要用來儲存當前呼叫棧用到的簡單資料型別:string、boolean、int、float 等。這些型別的記憶體占用小,容易**,基本上它們的值和指標占用的空間差不多,因此可以直接複製,gc 也比較容易做針對性的優化。複雜的高階型別占用的記憶體往往相對較大,儲存在 堆(heap) 中,gc**率相對較低,代價也較大,因此傳 引用/指標 可以避免進行成本較高的複製操作,並且節省記憶體,提高程式執行效率。

因此,在以下情況下可以考慮使用指標:

需要改變引數的值;

避免複製操作;

節省記憶體;

而在 golang 中,具體到高階型別 struct,slice,map 也各有不同。實際上,只有 struct 的使用有點複雜,slice,map,chan 都可以直接使用,不用考慮是值還是指標。

Golang 基礎 Go 語言的陣列

package basic import fmt func declaratarray fmt.println arr2 定義指定長度的陣列,並賦值 arr3 2 int fmt.println arr3 1 5 package basic import fmt func declaratarray...

Go語言 基礎 指標

區別於c c 中的指標,go語言中的指標不能進行偏移和運算,是安全指標。go語言中的函式傳參都是值拷貝,當我們想要修改某個變數的時候,我們可以建立乙個指向該變數位址的指標變數。傳遞資料使用指標,而無須拷貝資料。型別指標不能進行偏移和運算。go語言中的指標操作非常簡單,只需要記住兩個符號 取位址 和 ...

golang定義空指標 Go語言指標宣告及操作方法

指標 pointer 是程式語言中的乙個物件,利用位址,它的值直接指向 points to 存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為 指標 意思是通過它能找到以它為位址的記憶體單元。乙個指標變數指向了乙個值的記憶體位址。g...