//
disgtinguish_new&make
project
main.go
/*
引用类型 : slice channel map
new 和 make 创建引用类型的区别
new 会根据类型的大小,分配该大小的零值空间,然后返回该空间首地址.
make 会被编译器翻译成具体的创建函数,由其分配内存和初始化成员变量,返回对象,而非指针、
*/
package main
import (
. "fmt"
)
func main() {
var arr = []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
Println(arr)
var slice1 = make([]int, 5, 10) // make 创建返回的是 slice 对象
Println(slice1)
slice2 := new([]int) // new 创建返回的是 slice 指针
(*slice2) = append((*slice2), 1)
Println(*slice2)
/* 编译结果
[1 2 3 4 5 6 7 8 9]
[0 0 0 0 0]
[1]
*/
var map1 = make(map[string]int, 1000)
Println(map1)
map2 := new(map[string]int)
(*map2) = map[string]int{}
(*map2)["xuhe"] = 4
Println((*map2))
/* 编译结果
map[]
map[xuhe:4]
*/
}