The way go to go第七章总结

数组与切片

  1. 针对容器
  2. 切片是建立在Go语言数组类型之上的抽象

声明和初始化

  1. 数组长度最大是2Gb
  2. Go中数组是一种值类型,换句话说当数组作为参数传递给函数的时候,会发生拷贝现象(与C不同的地方),想要修改的话,利用&,或者生成数组切片。
  3. 可以取任意数组常量的地址来作为指向新实例的指针

切片

  1. 切片是一个长度可变的数组
  2. 切片是引用(类似于C中的数组类型,java中的数组同样属于引用)
  3. 注意new和make之间的区别:
    new函数分配内存;返回指针,获取内存地址。
    make函数初始化;返回初始值
  4. slice、map以及channel都是golang内建的一种引用类型,三者在内存中存在多个组成部分, 需要对内存组成部分初始化后才能使用,而make就是对三者进行初始化的一种操作方式

For-range结构

  1. for-range循环不能修改值(因为只是一个拷贝),注意为什么多维那个可以修改,分清range的是那个值!

切片重组
切片可以反复扩展直到占据整个相关数组,也可以重新分片。

切片的复制和追加

  1. 注意一点就是,容量不足以储存新增元素了,会分配一个新的切片来保证这一点,但是返回的切片可能已经指向一个不相同的相关数组了。所以append永远都是成功的,除非内存耗尽。

字符串,数组和切片的应用

  1. Go中字符串是不可以改变的,要转成字节数组,然后再通过修改,之后转成字符串格式。
  2. 字符串是一个双字结构,有指针,但是可以看成一个值类型(字符串数组)。但是涉及修改就不能看成值类型。
  3. 切片的垃圾回收:切片大小可能会远远小于数组,但是底层的数组回收是要求没有任何切片指向它。