在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
没有这个选项,因为它只返回指向类型零值的指针。