golang数组、切片、映射

  • 数组
    • 数组的内存布局是连续的。
    • 复制指针数组,智慧复制指针的值,而不会复制指针所指向的值
    • 函数之间传递变量总是以值的方式传递的,因此函数兼传递数组是一个开销很大的操作。可以通过传递指向数组的指针来进行数组的传递
  • 切片
    • 切片是围绕动态数组的概念构建的,可以按需自动增长和缩小
    • 切片底层内存在连续块中分配,因此能获得索引、迭代以及垃圾回收优化的好处。
    • 切片的数据结构
      • 指向底层数组的指针
      • 切片长度
      • 切片容量
    • 切片初始化
      • slice := make([]string,5),只指定切片长度,容量=长度
      • slice := make([]string,3,5),分别指定长度和容量
      • slice := []string{"red","blue","green","yellow","pink"}
      • 切片的容量 >= 长度
    • 数组和切片的声明区别
      • arr :=  [3]int{1,2,3}
      • arr :=  []int{1,2,3}
    • 切片增长
      • append()函数,返回一个新的切片
    • 截取新切片
      • slice := []int{1,2,3,4,5,6,7}
        • slice2 := slice[i,j]
        • i为从slice截取切片的起始下标,j为结束下标,包头不包尾
        • slice2的长度为(j-i),slice2的容量为(slice的容量-i)
      • slice := slice[i,j,k]
        • 长度:j - i
        • 容量:k- i
  • Append()
    • 新切片使用append()函数增长时,也影响源切片的数据(新切片和源切片共享底层数组),当增长超过源切片时,append()函数会创建一个新的底层数组来承载增长后的切片,将现有的值复制到新数组里,再追加新值,此时append()返回的切片的容量为源切片的两倍。
    • Append()函数会智能的处理底层数组的容量增长,切片容量小于1000时,每次成倍增长,超过1000后,增长因子改为1.25
    • 为了防止新切片append数据时污染源切片底层数组中的数据,可增加第三个索引控制新切片的容量,第一次append时就创建新的底层数组。
    • Append()函数可以使用"…"运算符将一个切片的所有元素追加到另一个切片里Append(slice,slice2…)
  • 迭代切片
    • for index,value := range slice{}
    • 迭代返回的value是迭代过程中根据切片中当前元素值依次赋值的新变量,所以value的地址总是相同的,若想获取每个元素的地址,可以使用切片变量和索引值&slice[index]
    • 内置函数len()返回切片的长度,cap()返回切片的容量
  • 映射
    • 映射是一种数据结构,用于存储无序的键值对
    • 映射使用两个数据结构来存储数据
      • 数组,存储用于选择桶的散列键的高八位值
      • 字节数组,存储键值对
    • 创建和初始化
      • map := make(map[string] int) 键类型string,值类型int
      • map := map[string]string{"aaa":"bbb"}
      • 未初始化的nil映射不能进键值对复制,否则会报错
    • 判断键是否存在
      • value, exists := map["xxx"]
    • 遍历映射
      • for key,value := range map{}
    • 在函数间传递
      • 映射在函数间传递时传递的是引用地址,而不是副本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值