1.go里面的切片类似数组,主要区别如下
- 切片是对数组的抽象,同时切片本身也是一个结构体。
- 参数传递时函数内部与外部引用的是同一个数组,所以对切片的修改会影响到函数外部。
- 如果发生扩容,情况会发生变化,同时扩容会导致数据拷贝;所以要尽量预估切片大小,避免数据拷贝。
- 对切片或数组重新生成切片时,由于共享的是同一个底层数组,所以数据会互相影响,这点需要注意。
- 切片也可以传递指针,但场景很少,还会带来不必要的误解;建议值传值就好,长度和容量占用不了多少内存
*[]T ,[]*T ,*[]*T 的区别
*[]T代表传递是切片本身,会进行修改,切片存放是T;[]*T 代表传递切片副本,切边存放是*T ,*[]*T 代表 传递切片本身,切片存放*T