Golang Pointer
Golang 指针
基础使用
package main
import "fmt"
func ptr() {    var ptr1 *int        // 定义空指针,其值为nil  i := 42
  p := &i                                                      // 声明并赋值指针    // %p用于打印变量指针地址,或者使用&ptr  fmt.Printf("type: %T, value: %v, ptr addr: %p\n", p, *p, p) // 获取指针类型以及指针指向的值  *p = 21                                                      // 通过指针修改i的值  fmt.Println(i)  y := new(string) // 使用new(type)函数来创建指针  *y = "ptr string create from new()"  fmt.Printf("type: %T, value: \"%v\", ptr addr: %p\n", y, *y, &y)}// outputtype: *int, value: 42, ptr addr: 0xc0000b601821type: *string, value: "ptr string create from new()", ptr addr: 0xc0000b6028&p取指针,*p取对应值。
:warning:指针声明而没有赋值,默认为nil,即该指针没有任何指向。当指针没有指向的时候,不能对(*point)进行操作包括读取,否则会报空指针异常。
命令行工具中使用
// 定义命令行参数,参数一是选项名称,参数二是默认值,参数三是使用--help时出现的帮助内容var mode = flag.String("mode", "", "process mode")func getCmd(mode *string) {  // 解析命令行参数  flag.Parse()  // 输出命令行参数  fmt.Printf("type: %T,Arg is: %v", mode, *mode)}// 运行go run . --mode=hah// outputtype: *string,Arg is: hah获取用户交互输入
package main
import "fmt"
func scan() {  var name string  var age int  fmt.Print("input your name: ")  fmt.Scan(&name)  fmt.Print("input your age: ")  fmt.Scan(&age)  fmt.Printf("name: %v, age: %v", name, age)}参考链接
- go 语言101指针:https://gfw.go101.org/article/pointer.html
- 关于golang指针的理解与使用:https://studygolang.com/articles/29273
- Go语言指针详解:http://c.biancheng.net/view/21.html
