Skip to content
On this page

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
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取对应值。

⚠️指针声明而没有赋值,默认为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
// 定义命令行参数,参数一是选项名称,参数二是默认值,参数三是使用--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)
}
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)
}

参考链接