var、new、make
# 前言
# 指针
var n *int // 声明一个指向整数的指针变量n
num := 42 // 声明一个整数变量num,并将其初始化为42
n = &num // 将整数变量num的地址分配给指针变量n
fmt.Println(*n) // 输出指针变量n所指向的整数值,即42
1
2
3
4
2
3
4
指针变量用 *类型进行定义,指针变量只能存地址,想取到指针变量的地址用 &,想取到指针变量对应的值,用 *变量名
# var
- 用var定义值类型,会分配内存空间,并赋该类型的零值
- 用var定义引用类型:不会分配内存,默认就是nil
//值类型
var i int
fmt.Println(i) //i=0
//引用类型
var j *int
fmt.Println(j)
*j = 10 //invalid memory address or nil pointer dereference
//也就是说,空指针还没有内存分配,是不能使用的。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# new
// 函数签名
func new(Type) *Type // 返回指针类型
1
2
2
可以用来定义值类型和引用类型:分配内存空间,并赋该类型的零值,返回一个指向该类型内存地址的指针
日常工作中,通常是直接声明指针使用,不需要new操作。
var j *int
j = new(int) // 让j里面的内容指向一块分配好的内存地址,地址里面设置int的零值:0
fmt.Println(j) // 0xc000b4008
fmt.Println(*j) // 0
*j = 10
fmt.Println(*j) // 10
1
2
3
4
5
6
2
3
4
5
6
# make
// 函数签名
func make(t Type, size ...IntegerType) Type
1
2
2
make用于map, slice,chan 的内存创建,因为他们三个是引用类型,直接返回这三个类型本身(引用类型),不赋零值
编辑 (opens new window)
上次更新: 2023/04/23