Go 指標相關

2022-01-10 07:53:07 字數 1657 閱讀 2217

go語言中的指標非常簡單,沒有偏移和運算,只需要記住兩個符號。&取變數位址與*根據位址取值。

以下是乙個簡單的示例:

package main

import (

"fmt"

)func main()

var addarr = &arr

fmt.printf("%p \n",addarr) // 列印位址 0xc000062330

fmt.printf("%v \n",*addarr) // 根據位址列印值

}

當我們使用&取出乙個變數的記憶體位址時,可以通過%t檢視其指標型別。

go語言中的值型別(int、float、bool、string、array、struct)都有對應的指標型別,如:*int*int64*string等。

package main

import (

"fmt"

)func main()

以下示例中宣告了乙個指標變數,但是該指標指向的記憶體位址還沒有被go進行分配,賦值會引發異常。

package main

import (

"fmt"

)func main()

new()是乙個內建的函式,用於對乙個指標變數開闢記憶體空間。 為了解決上面記憶體空間未被開闢的問題,可以使用該函式進行開闢。

注意,實際開發中new用的並不多。

package main

import (

"fmt"

)func main()

make()new()相同,都是進行記憶體空間開闢的,但是它只針對slicemapchan的記憶體建立,並且它返回的值是這三個型別的本身,這三種型別不是屬於值型別,而是屬於引用型別,故我們可以不使用變數對其進行接收。

注意,在宣告上述三種型別時,都需要使用make進行記憶體建立。

package main

import (

"fmt"

)func main()

指標取值與指標位址

取位址操作符&和取值操作符*是一對互補操作符,&取出位址,*根據位址取出位址指向的值。

new與make的區別

二者都是用來做記憶體分配的。

make只用於slicemap以及channel的初始化,返回的還是這三個引用型別本身;

new用於型別的記憶體分配,並且記憶體對應的值為型別零值,返回的是指向型別的指標。

GO相關 變數

宣告變數 宣告變數的一般形式是使用 var 關鍵字 var name type go語言的基本型別 type 有 bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte uint8 的別名...

Go 語言指標

b 什麼是指標 b 乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前你需要宣告指標。指標宣告格式如下 var var name var type var type 為指標型別,var name 為指標變數名,號用於指定變數是作為乙個指標。以下是有效的指標宣告 var ip int...

GO語言指標

以前學習的語言裡沒有指標操作,剛接觸到go語言指標,消化的比較慢,故寫一下。指標型別宣告 t,指標的型別為 t,例 var i int 指標型別的值 t 在等號左邊表示指標宣告var a int 32 p a p的值是指向a的位址在指標前加 獲取指標p指向的值,例 var a int 32 變數宣告...