1.切片是引用类型
2.切片做为参数传递给函数的意义重大,同数组,当传递较大的数组切片时可以有效的提升cpu执行效率
3.new 用于各种类型的内存分配 返回的是指针,var variables = new(T)
返回的是T,指针类型,即返回的是一个地址,默认是当前类型的零值,它返回了一个指针,指向新分配的类型 T 的零值。也就是说new 返回指针。
4.make 用来分配内存主要用来分配引用类型,比如channel ,map ,slice,返回一个有初始值 (非零) 的 T 类型,不是T类型
make 和 new
make
关键字的作用是创建切片、哈希表和 Channel 等内置的数据结构,而 new
的作用是为类型申请一片内存空间,并返回指向这片内存的指针。
slice := make([]int, 0, 100) hash := make(map[int]bool, 10) ch := make(chan int, 5)
slice
是一个包含data
、cap
和len
的结构体reflect.SliceHeader
;hash
是一个指向runtime.hmap
结构体的指针;ch
是一个指向runtime.hchan
结构体的指针;
package main import "fmt" func main() { i := new([]int) fmt.Println(*i) *i = append(*i, 1) fmt.Println(i) }
引用类型初始化为nil
基本数据类型声明有初始值
引用类型声明没有分配内容空间
package main import "fmt" func main() { var a []int var b map[int]string fmt.Println(a == nil) // true fmt.Println(b == nil) // true }