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