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