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

2021-10-13 09:10:28 字數 2196 閱讀 9584

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

go語言支援指標型別*t,指標的指標**t,以及包含包名字首的*package.t。

指標宣告

在指標型別變數前面加上 *(取值符)來獲取指標所指向的內容。

在值型別變數前面加上 &(取位址符)來獲取該變數的指標。

宣告乙個int值的指標變數var ip *int

宣告乙個string值的指標變數var sp *string

通過 := 語法來定義指標var str string = "oldboy"

sp := &str

宣告乙個int值的指標的指標變數var p **int

宣告乙個time.time值的指標變數var t *time.time

import "fmt"

func main() {

var str string = "oldboy"

空指標當乙個指標被定義後沒有分配到任何變數時,它的值為 nil。nil 指標也稱為空指標。

nil在概念上和其它語言的null、none、nil、null一樣,都指代零值或空值。package main

import (

"fmt"

func main() {

var ip *int

var sp *string

if ip == nil {

fmt.println("ip == nil")

if sp == nil {

fmt.println("sp == nil")

定義的不同型別的零值不能用於比較運算,例項如下:package main

import (

"fmt"

func main() {

var ip *int

var sp *string

if ip == sp {

fmt.println("error")

編譯錯誤:./main.go:11:8: invalid operation: ip == sp (mismatched types *int and *string)

檢視零值指標型別,例項如下:package main

import (

"fmt"

func main() {

var ip *int

var sp *string

fmt.printf("ip : %#v\n", ip)

fmt.printf("sp : %#v\n", sp)

執行結果:ip : (*int)(nil)

sp : (*string)(nil)

指標型別轉換

go語言是不允許兩個指標型別進行轉換的。

我們一般使用t作為乙個指標型別,表示乙個指向型別t變數的指標。為了安全的考慮,兩個不同的指標型別不能相互轉換,比如 *uint 不能轉為 *int 。例項如下:package main

func main() {

var i uint = 10

var p2 *int

p1 := &i

p2 = (*int)(p1)

編譯錯誤:./main.go:8:13: cannot convert p1 (type *uint) to type *int

unsafe.pointer型別用於表示任意型別的指標。有4個特殊的只能用於pointer型別的操作:

1、 任意型別的指標可以轉換為乙個pointer型別值

2、 乙個pointer型別值可以轉換為任意型別的指標

3、 乙個uintptr型別值可以轉換為乙個pointer型別值

4、 乙個pointer型別值可以轉換為乙個uintptr型別值

因此,pointer型別允許程式繞過型別系統讀寫任意記憶體。使用它時必須謹慎。例項如下:package main

import (

"fmt"

"unsafe"

func main() {

var i uint = 10

var p2 *int

p1 := &i

p2 = (*int)(unsafe.pointer(p1))

fmt.println(*p2)

golang 定義乙個空切片 go語言切片用法詳解

1.定義 切片在go語言的原始碼定義如下所示,由於其資料結構中有指向底層陣列的指標,所以切片是一種引用型別。src runtime slice.go type slice struct s1 array 0 4 s2 array 4 s3 array 2 fmt.println s1 0 1 2 3...

Golang 基礎 Go 語言的指標

變數是一種使用方便的佔位符,用於引用計算機位址,而在 go 語言中可以通過 符號獲取乙個變數在計算機中對應的記憶體位址。package basic import fmt func main 乙個指標變數指向了乙個值的記憶體位址。go 語言中的指標語法與 c 類似,都是使用 符號宣告指標變數 pack...

Golang語言如何避免空指標引發的panic詳解

目錄 在 golang 語言專案開發中,變數操作不當就會觸發空指標引發程式 panic。空指標就是未分配記憶體的指標型別的變數,變數的值是 nil,因為操作空指標會引發 panic,所以我們在程式開發中要特別小心。在呼叫結構體指標型別返回值的函式或方法時,並且需要操作返回值的字段或方法,此時,我們就...