一。定義:函數
數據類型前加 * 號: var xx *int var yy *string 。。。學習
二。用途:spa
指針的一大用途就是能夠將變量的指針做爲實參傳遞給函數,從而在函數內部可以直接修改實參所指向的變量值命令行
三。用法:設計
& 取一個變量的地址指針
* 取一個指針變量所指向的地址的值code
四。new函數:初始化了一個地址blog
package main import ( "fmt" ) func set_value(x_ptr *int) { *x_ptr = 100 } func main() { x_ptr := new(int) set_value(x_ptr) //x_ptr 指向的地址 fmt.Println(x_ptr) //x_ptr 自己的地址 fmt.Println(&x_ptr) //x_ptr 指向的地址值 fmt.Println(*x_ptr) }
五。go語言命令行入參,經過flag入參數。 字符串
Go 語言的 flag 包中,定義的指令以指針類型返回。經過學習 flag 包,能夠深刻了解指針變量在設計上的方便之處。
下面的代碼經過提早定義一些命令行指令和對應變量,在運行時,輸入對應參數的命令行參數後,通過 flag 包的解析後便可經過定義的變量獲取命令行的數據。
獲取命令行輸入:string
1 package main 2 // 導入系統包 3 import ( 4 "flag" 5 "fmt" 6 ) 7 // 定義命令行參數 8 var mode = flag.String("mode", "", "process mode") 9 func main() { 10 // 解析命令行參數 11 flag.Parse() 12 // 輸出命令行參數 13 fmt.Println(*mode) 14 }
將這段代碼命名爲main.go,而後使用以下命令行運行:
$ go run flagparse.go --mode=fast
命令行輸出結果以下:
fast
代碼說明以下:
因爲以前使用 flag.String 已經註冊了一個 mode 的命令行參數,flag 底層知道怎麼解析命令行,而且將值賦給 mode*string 指針。在 Parse 調用完畢後,無須從 flag 獲取值,而是經過本身註冊的 mode 這個指針,獲取到最終的值。代碼運行流程以下圖所示。