首页 > 其他分享 >go数据类型-slice底层

go数据类型-slice底层

时间:2023-11-28 20:33:19浏览次数:42  
标签:slice 容量 int 数据类型 切片 数组 go

切片的底层数据结构

有上篇string为基础了,能猜到slice肯定也有一个对应的struct。

  在runtime的 slice.go中
     type slice struct {
  	array unsafe.Pointer
  	len   int
  	cap   int
  }

切片的本质是对数组的引用

len 表示当前已经存储的个数,cap表示容量。

切片的创建

  1. 根据数组创建

     s := arr[0:31]
    
  2. 字面量:编译时插入创建数组的代码

     s := []int{1, 2, 3}
    
  3. make:运行时创建数组

     slice := make([lint, 10)
    

切片的追加

扩容时,编译时转为调用 runtime.growslice()
有兴趣的可以看下源码,方法介绍也能看出一些逻辑。

直接小结:

  1.如果期望容量大于当前容量的两倍就会使用期望容量
    
    比如当前是3,期望9,那么即使翻倍也达不到要求,所以直接变成9.      

  2.如果当前切片的长度小于 1024,将容量翻倍
    
    比如当前容量为3, 如果再加一个值,则容量直接变为 6.

  3.如果当前切片的长度大于 1024,每次增加 25%
    

  4.切片扩容时,并发不安全,注意切片并发要加锁,
  
    因为扩容时候,会新创建一个数组,如果在这个过程中,并发访问可能会是访问老的数组。
    因为数组必须是连续的存储空间,所以每次扩容,都会创建一个新的数组。

标签:slice,容量,int,数据类型,切片,数组,go
From: https://www.cnblogs.com/studyios/p/17862730.html

相关文章

  • 八大基本数据类型
    八大基本数据类型1.整型int2.浮点型float3.字符串型str4.列表list5.字典dict6.布尔类型bool7.元组tuple8.集合set(一)数字类型【1】整型int(1)作用整数类型用于表示整数,是一种基本的数字类型,广泛用于表示计数、索引等整数值。(2)整型定义#1.整型定义number=18#查看......
  • python基础之数据类型
    数据类型(重要)什么是数据类型? 视频文件音频文件表格文件图片等等这些都是保存数据的方式#在IT领域也有各种各样的保存数据的方式数据类型的种类?-数字类型-整数类型(int)-浮点类型(float)-字符串类型(str)-列表类型(list)-字典类型(dict)-布尔类型(......
  • 大数据实验(Mysql、hbase、redis、MongoDBjava客户端连接)
    1.MySQL启动:虚拟机输入mysql-uroot-p输入密码:hadoop(黑马的mysql密码是hadoop)pom.xml需要引入mysql<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></proper......
  • 【python入门之基本数据类型的学习】---基本数据类型(list、str)【二】
    【三】字符串类型(str)【1】作用字符串类型(str)用于表示文本信息,是一种非常重要的数据类型,用于处理文字、字符等信息【2】定义(1)定义方式字符串可以使用单引号、双引号或三引号进行定义#定义方式1:name_1='Jack'#(当左边有赋值符号和遍历名的时候,它就是字符串)#定......
  • 【python入门之基本数据类型】---基本数据类型(字典、布尔)【三】
    【五】字典类型(dict)【1】作用如果我们需要用一个变量记录多个值,但多个值是不同属性的比如人的姓名、年龄、身高,用列表可以存,但列表是用索引对应值的,而索引不能明确地表示值的含义这就用到字典类型,字典类型是用key:value形式来存储数据其中key可以对value有描述性的功能......
  • 【python入门之基本数据类型】---基本数据类型(元组、集合)【四】
    【七】元组类型(tuple)【1】作用元组(tuple)是一种不可变的序列类型,类似于列表,用于存储多个有序元素。元组与列表的主要区别在于元组的元素不能被修改、删除或添加,是不可变的数据类型。元组通常用于存储相关联的数据,保持数据的完整性。【2】定义元组通过小括号()......
  • 【Python爬虫】第11篇:Mongodb数据库进阶使用。从0到scrapy高手笔记(附代码,可自取)
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。全套笔记和代码自取地址:请移步这里感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~共8章,37子模块Mongodb数......
  • 时区和国际化问题 django admin(管理后台的简单使用)
    1时区和国际化问题```pythonsetting.py中1后台管理汉语问题 LANGUAGE_CODE='zh-hans'#管理后台看到的就是中文2时区问题(使用东八区) TIME_ZONE='Asia/Shanghai'USE_TZ=False``` 2djangoadmin(管理后台的简单使用)```python0管理后台是django提供的可以快速对......
  • go基础数据类型 - string的底层
    先上一段代码:funcmain(){ content:="长沙boy" content1:="boy" fmt.Printf("content:%d\n",unsafe.Sizeof(content)) fmt.Printf("content1:%d\n",unsafe.Sizeof(content1))}打印的结果:content:16content1:16问题1、从这里......
  • mongoDB操作避坑
    1.首先MongoDB6.0及以上的版本是不带mongoshell的,所以要向用需要自己去下载,然后将压缩包解压到桌面然后复制过去一定是复制过去,要不然mongo的管理员权限不让你复制,  完成之后在这个文件加下的bin中双击后回车就可进入shell界面。2.然后是API操作,这里用的是maven,我们将代......