栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

golang中的切片

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang中的切片

前言

golang里面有个数据类型叫切片,这在java里面是没有对应的数据结构,发现还挺有意思的,也有一些要注意的点,特此记录一下。

首先,切片在golang中是属于引用数据类型,其结构相当于一个可变数组,其中有容量和长度的概念,长度则是我们所理解的储存数据的大小,而容量则是该数组所能容纳的最大数据量。

那么有人可能会说,不是说是可变数组吗?怎么还会有容量的限制?

记录

首先我们要知道,在golang|中,给切片追加数据使用的是append函数,当我们使用make函数创建一个切片时,实际上底层为我们引用了一个底层数组,这个底层数组的容量即为切片的容量。当我们在容量足够时,数据可以正常往这个底层数组添加,但是当容量不足够了,此时从程序上看,他是不会报错的,也就是我们所说的这个数组“扩容”了。但是实际上,从底层来看,我们知道数组是不能扩容的,所以golang就将原来的引用指向了容量更大的底层数组,以此来达到扩容的目的。下面的例子可以看下:

func main()  {
	var slice []int = make([]int,5,8)
	slice[1] = 20
	slice[3] = 10
	fmt.Printf("slice=%pn",slice)
	slice1 := append(slice, 70,80,90)
	fmt.Printf("slice1=%v slice1=%pn",slice1,slice1)
	slice2 := append(slice, 70,90,70)
	fmt.Printf("slice2=%v slice2=%pn ",slice2,slice2)
}

还有一个点,我们知道golang可以用rang来遍历,但是当我们遍历切片时,遍历的次数是按长度还是容量呢?
答案是长度。我们可以通过测试以下代码配合底层源码来理解。

func main()  {
	var slice []int = make([]int,5,8)
	for range slice {
		fmt.Println("test......",slice)
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号