Go语言中new和make关键字有哪些区别
更新时间:2023-12-28前言
在Go语言中,new和make是两个关键字,用于分配内存并初始化变量。虽然它们看起来类似,但实际上具有不同的用途和行为。本文将详细介绍new和make在Go语言中的区别。区别
1. new关键字:new是用于分配内存的关键字,在Go语言中用于创建值类型的变量,并返回一个指向该类型的指针。
示例:
package main import "fmt" func main() { p := new(int) fmt.Println(*p) // 输出: 0 }
在上面的示例中,我们使用new关键字创建了一个新的int类型的变量,并将其保存在指针p中。由于new分配的内存是零值化的,因此*p的初始值为0。
2. make关键字:make是用于分配内存的关键字,但是与new不同的是,它只能创建切片、映射和通道等引用类型的变量,并且返回的是该类型本身而不是指针。
示例:
package main import "fmt" func main() { s := make([]int, 5) fmt.Println(len(s)) // 输出: 5 }
在上面的示例中,我们使用make关键字创建了一个具有5个元素的整数切片。make函数返回的是该切片本身,并且已经分配了内存空间,所以我们可以直接使用len函数获取切片的长度。
总结
new和make是Go语言中用于分配内存和初始化变量的关键字,它们之间有以下区别:
- new用于值类型的变量,返回的是指向该类型的指针;
- make用于引用类型的变量,返回的是该类型本身;
- new分配的内存是零值化的;make分配的内存根据类型进行初始化。
根据具体需求选择合适的关键字可以提高代码的可读性和性能。因此,在使用new和make时,要注意它们的区别和适用场景。