为什么Go需要make()和new()函数?有什么区别?
大家好!我最近刚开始学习Go,一直搞不懂为什么需要两个不同的内存分配函数:make()和new()。看起来两者都能创建对象,但文档中的例子让我更困惑了。
这是我尝试做的事情。我想创建一个slice并立即添加元素:
package main
import "fmt"
func main() {
// 尝试通过new创建slice
slice1 := new([]int)
fmt.Println(slice1) // 输出:&[]
// 但如何添加元素?slice1 = append(slice1, 1) 不工作
// 错误:append的第一个参数必须是slice;实际是*[]int
// 尝试通过make创建slice
slice2 := make([]int, 5)
fmt.Println(slice2) // 输出:[0 0 0 0 0]
// 可以工作,但为什么长度是5?能不能不指定长度?
// map也是同样的情况
var m1 map[string]int
// m1["key"] = 1 // panic: assignment to entry in nil map
m2 := make(map[string]int)
}