go指针

一。定义:

      数据类型前加 * 号: var xx *int   var yy  *string  。。。

二。用途:

      指针的一大用途就是可以将变量的指针作为实参传递给函数,从而在函数内部能够直接修改实参所指向的变量值

三。用法:

     & 取一个变量的地址

     * 取一个指针变量所指向的地址的值

四。new函数:初始化了一个地址

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 包的解析后即可通过定义的变量获取命令行的数据。

获取命令行输入:

 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

代码说明如下:

  • 第 8 行,通过 flag.String,定义一个 mode 变量,这个变量的类型是 *string。后面 3 个参数分别如下:
    • 参数名称:在给应用输入参数时,使用这个名称。
    • 参数值的默认值:与 flag 所使用的函数创建变量类型对应,String 对应字符串、Int 对应整型、Bool 对应布尔型等。
    • 参数说明:使用 -help 时,会出现在说明中。
  • 第 11 行,解析命令行参数,并将结果写入创建的指令变量中,这个例子中就是 mode 变量。
  • 第 13 行,打印 mode 指针所指向的变量。


由于之前使用 flag.String 已经注册了一个 mode 的命令行参数,flag 底层知道怎么解析命令行,并且将值赋给 mode*string 指针。在 Parse 调用完毕后,无须从 flag 获取值,而是通过自己注册的 mode 这个指针,获取到最终的值。代码运行流程如下图所示。


图:命令行参数与变量的关系

posted on 2018-10-03 21:47  晓风残梦  阅读(182)  评论(0编辑  收藏  举报

导航