Go 切片的 append 操作总结:https://segmentfault.com/a/1190000020170529
1、数组和slice的区别
- 声明数组时,⽅括号内写明了数组的⻓度或者...,
- 声明slice时候,⽅括号内为空 作为函数参数时,数组传递的是数组的副本,⽽slice传递的是指针。
array 类型 array是固定⻓度的数组,使⽤前必须确定数组⻓度
golang array 特点:
- golang中的数组是值类型,也就是说,如果你将⼀个数组赋值给另外⼀个数组,那么,实际上就是整个数组拷⻉了⼀份 如果golang中的数组作为函数的参数,那么实际传递的参数是⼀份数组的拷⻉,⽽不是数组的指针 array的⻓度也是Type的⼀部分,这样就说明[10]int和[20]int是不⼀样的。
- slice类型 slice是⼀个引⽤类型,是⼀个动态的指向数组切⽚的指针。 slice是⼀个不定⻓的,总是指向底层的数组array的数据结构。
2、
<1>、两种形式new(T)
和&T{}
完全等效:两者都分配一个零T并返回一个指向该已分配内存的指针。唯一的区别是&T {}对builtin types like int
不起作用;您只能执行new(int)
。
<2>、struct返回的是一个结构体 new 返回的是一个指针
1.new(T)创建一个没有任何数据的类型为T的实例,并返回该实例的指针;
2.make(T, args)只能创建 slice、map和channel,并且返回一个有初始值args(非零)的T类型的实例,非指针。