golang中new和make的区别
不同:
1、初始化对象不同
new:array和struct
make:map、channel、slice
2、返回值类型不同
new:返回一个指向参数的一个指针,并且初始化的那个值用zero value初始化
make:返回要给与参数类型一样的类型,并且初始化
slice:至少指定一个参数
map:没有必要制定,这个起始的大小是可以忽略的
channel:制定是否是缓冲通道。
slice:
大小指定了长度,切片的容量等于它的长度,第二个整数可能制定不同的容量,
这个值一定小于这个切片的长度。
make([]int,5) length=5 cap=5
make([]int,0,5) length=0 cap=5
map:
一个空的map被分配足够大的空间来容纳制定数量的元素,在这种情况下,分配一个启始这个大小的数字就可以忽略,
channel:
make(channel int,8) 缓冲通道
make(channel int) 非缓冲通道
new:注释
// The new built-in function allocates memory. The first argument is a type,
// not a value, and the value returned is a pointer to a newly
// allocated zero value of that type.
make:注释
// The make built-in function allocates and initializes an object of type
// slice, map, or chan (only). Like new, the first argument is a type, not a
// value. Unlike new, make's return type is the same as the type of its
// argument, not a pointer to it. The specification of the result depends on
// the type:
// Slice: The size specifies the length. The capacity of the slice is
// equal to its length. A second integer argument may be provided to
// specify a different capacity; it must be no smaller than the
// length, so make([]int, 0, 10) allocates a slice of length 0 and
// capacity 10.
// Map: An empty map is allocated with enough space to hold the
// specified number of elements. The size may be omitted, in which case
// a small starting size is allocated.
// Channel: The channel's buffer is initialized with the specified
// buffer capacity. If zero, or the size is omitted, the channel is
// unbuffered.