在Golang中,new和make都是用于创建值的内置函数,但它们有不同的用途和语法。
new函数
new函数用于创建一个指向新分配类型零值的指针。语法如下:
goCopy code
ptr := new(Type)
其中Type表示要分配的类型,ptr是指向该类型零值的指针。
示例:
goCopy code
package main
import "fmt"
type person struct {
name string
age int
}
func main() {
p := new(person)
fmt.Println(p) // &{ 0}
}
make函数
make函数用于创建一个指定类型的值,并返回其已初始化的值。它通常用于创建slice、map和channel。语法如下:
goCopy code
make(Type, size)
其中Type表示要创建的类型,size表示要创建的大小或缓冲区大小,具体取决于Type的类型。
示例:
goCopy code
package main
import "fmt"
func main() {
// 创建一个有3个元素的整数slice
s := make([]int, 3)
fmt.Println(s) // [0 0 0]
// 创建一个有2个键值对的map
m := make(map[string]int)
m["foo"] = 42
m["bar"] = 13
fmt.Println(m) // map[foo:42 bar:13]
// 创建一个缓冲区大小为2的字符串通道
c := make(chan string, 2)
c <- "hello"
c <- "world"
fmt.Println(<-c, <-c) // hello world
}
总结:
new用于创建指针,make用于创建slice、map和channel。new返回指向类型零值的指针,make返回已初始化的值。make函数有一个可选参数,指定缓冲区大小。new没有这个选项,因为它只返回指向类型零值的指针。