Skip to content

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)
}
// output
type: *int, value: 42, ptr addr: 0xc0000b6018
21
type: *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
// output
type: *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)
}

参考链接