疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 后端
  3. GOLANG
  4. 正文

浅谈一下go语言中的slice及其一些小坑

2023年5月10日 387点热度 0人点赞 0条评论

数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。虽然数组元素可以被修改,但是数组长度是固定的,而且在go语言中数组的长度也是数组类型的组成部分,所以不同长度或不同类型的数据组成的数组都是不同的类型,因而在go语言中很少使用数组。

slice

slice(中文翻译叫:切片),slice在go语言中不是数组,但其底层数据对应的数据类型是数组,不过每个切片还包含了独立的长度len和容量信息cap,可以看做是一个结构体

type slice struct {
    array unsafe.Pointer //存放数据的数组指针
    len   int            //长度
    cap   int            //容量
}

image

image
image
image

// 下面是查看扩容倍数的一个小方法
func coef_cap()  {
	a :=make([]int,0,5)  // 初始化构造一个 容量为5 长度为0的切片
	preCap := cap(a)
	for i := 0; i < 1000; i++ {
		a = append(a, i)   // 往a切片里面添加元素
		currCap := cap(a)
		if currCap>preCap{  // 判断当前切片长度是否超出容量,超出容量就会扩容
			fmt.Printf("上一个cap %d --> 当前cap %d\n",preCap,currCap)   // 打印上一个没扩容前的容量,和扩容后的容量
			preCap = currCap  
		}
	}
}
标签: golang
最后更新:2023年5月10日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1