8 Go語言 指標型別

2022-04-29 12:24:12 字數 1723 閱讀 4228

1. 實際用法

package main

import (

"fmt"

)func main()

執行結果:

0xc042052088 0xc0420461b0

2. 從指標獲取指標指向的值

​ 在對普通變數使用&操作符取位址獲得這個變數的指標後,可以對指標使用*操作,也就是指標取值

package main

import (

"fmt"

)func main()

執行結果:

ptr type: *string

address: 0xc0420401b0

value type: string

value: malibu point 10880, 90265

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

對變數進行取位址(&)操作,可以獲得這個變數的指標變數。

指標變數的值是指標位址。

對指標變數進行取值(*)操作,可以獲得指標變數指向的原變數的值。

3. 使用指標修改值
package main

import "fmt"

// 交換函式

func swap(a, b *int)

func main()

執行結果:

2 1**說明如下:

第 6 行,定義乙個交換函式,引數為 a、b,型別都為 *int,都是指標型別。

第 9 行,將 a 指標取值,把值(int型別)賦給 t 變數,t 此時也是 int 型別。

第 12 行,取 b 指標值,賦給 a 變數指向的變數。注意,此時*a的意思不是取 a 指標的值,而是「a指向的變數」。

第 15 行,將 t 的值賦給 b 指向的變數。

第 21 行,準備 x、y 兩個變數,賦值 1 和 2,型別為 int。

第 24 行,取出 x 和 y 的位址作為引數傳給 swap() 函式進行呼叫。

第 27 行,交換完畢時,輸出 x 和 y 的值。

*操作符作為右值時,意義是取指標的值;作為左值時,也就是放在賦值操作符的左邊時,表示 a 指向的變數。其實歸納起來,*操作符的根本意義就是操作指標指向的變數。當操作在右值時,就是取指向變數的值;當操作在左值時,就是將值設定給指向的變數。

​ 如果在 swap() 函式中交換操作的是指標值

package main

import "fmt"

func swap(a, b *int)

func main()

執行結果:

1 2結果表明,交換是不成功的。上面**中的 swap() 函式交換的是 a 和 b 的位址,在交換完畢後,a 和 b 的變數值確實被交換。但和 a、b 關聯的兩個變數並沒有實際關聯。這就像寫有兩座房子的卡片放在桌上一字攤開,交換兩座房子的卡片後並不會對兩座房子有任何影響。

1. 語法格式

new(型別)

2. 例項

str := new(string)

*str = "ninja"

fmt.println(*str)

3. 註解

new() 函式可以建立乙個對應型別的指標,建立過程會分配記憶體。被建立的指標指向的值為預設值

GO學習 8 Go語言基礎之陣列

陣列是同一種資料型別元素的集合。在go語言中,陣列從宣告時就確定,使用時可以修改陣列成員,但是陣列大小不可變化。基本語法 定義乙個長度為3元素型別為int的陣列a var a 3 intvar 陣列變數名 元素數量 t比如 var a 5 int,陣列的長度必須是常量,並且長度是陣列型別的一部分。一...

8 go語言 測試與效能調優

程式應該多做測試,少做除錯 傳統測試 vs 驅動測試 go語言使用 傳統測試 test public void testadd 測試資料和測試邏輯混合在一起 出錯資訊不明確 一旦乙個資料出錯測試全部結束 驅動測試 test struct,整數溢位 最大的整數 1成為最小整數 for test ran...

Go實現設計模式系列(8) Go實現物件池模式

物件池模式,物件被預先建立並初始化後放入物件池中,物件提供者,物件提供者就能利用已有的物件來處理請求,減少物件頻繁建立所浪費的資源。例如資料庫的連線池等等,基本都是建立後就被放入連線池中,後續的查詢請求使用的都是連線池中的物件,從而加快了查詢速度 不然每次查詢都需要重新建立資料庫連線物件,比較浪費 ...