string

  • 字符串只读数组
  • 数据结构
    1. type StringHeader struct {
    2. Data uintptr
    3. Len int
    4. }

array

  • 数组在初始化之后大小就无法改变,存储元素类型相同

slice

  • 切片与数组的关系非常密切,切片引入了一个抽象层,提供了对数组中部分连续片段的引用,而作为数组的引用,我们可以在运行区间可以修改它的长度和范围。当切片底层的数组长度不足时就会触发扩容,切片指向的数组可能会发生变化,不过在上层看来切片是没有变化的,上层只需要与切片打交道不需要关心数组的变化
  • 在对切片进行切割的时候前面的数组容量会被切割掉

    切片扩容
  • 如果期望容量大于当前容量的两倍就会使用期望容量;

  • 如果当前切片的长度小于 1024 就会将容量翻倍;
  • 如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;
    1. type SliceHeader struct {
    2. Data uintptr // 数据
    3. Len int // 切片长度
    4. Cap int // 切片容量
    5. }

map

  1. type hmap struct {
  2. count int
  3. flags uint8
  4. B uint8
  5. noverflow uint16
  6. hash0 uint32
  7. buckets unsafe.Pointer
  8. oldbuckets unsafe.Pointer
  9. nevacuate uintptr
  10. extra *mapextra
  11. }
  12. type bmap struct {
  13. topbits [8]uint8
  14. keys [8]keytype
  15. values [8]valuetype
  16. pad uintptr
  17. overflow uintptr
  18. }