当前位置:   article > 正文

【Go学习笔记】数据类型之切片(slice)_切片 数据结构

切片 数据结构

切片 是Go中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。它非常灵活,支持自动扩容。切片的底层一段连续的内存。

切片的内部实现

切片是一个有三个字段的数据结构,分别为地址长度容量,它对底层的数组(内部是通过数组保存数据的)进行了抽象,并提供相关的操作方法。

切片与底层数组的对应关系
地址:指向底层数组的指针。
长度:切片可以访问的元素的个数,使用内置函数len(切片名)可以获得。
容量:从切片地址开始到底层数组结尾的长度,使用内置函数cap(切片名)可以获得。

切片的创建和初始化

在Golang中可以通过多种方式创建和初始化切片。可以根据切片所需的容量来决定如何创建切片。

切片的声明

切片的声明格式如下:

	var 切片名 []元素类型
	
	例如,声明一个地址为nil的整型切片:
	var myNum []int   // 例:声明一个地址为nil的整型切片
  • 1
  • 2
  • 3
  • 4

单纯声明后的切片并没有分配内存空间,因此地址指向nil,可以称之为nil切片。nil切片的长度和容量都为0,数据结构状态如下:
nil切片的数据结构状态
在Golang中,nil切片很常见,可以使用很多标准库和内置函数。在需要描述一个不存在的切片时,nil切片会很好用。比如,函数要求返回一个切片但是发生异常的时候。

通过make()函数创建切片

使用Golang内置的make()函数,动态创建一个切片,格式如下:

    make([]类型, 长度, 容量)
    
    a := make([]int, 3, 5)   // 定义一个长度为3,容量为5,元素为int类型的切片
    fmt.Println(a)           // [0 0 0] 切片可访问的元素数为3
    fmt.Println(len(a))      // 3
	fmt.Println(cap(a))      // 5
	fmt.Printf("%#v \n", a)  // []int{0, 0, 0}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例代码中a的内部存储空间已经分配了5个,但实际只是用了3个。容量并不会影响当前元素的个数。

当要创建的切片长度=容量时,可以使用以下格式进行创建:

	make([]类型, 长度)         // 创建长度=容量的切片  
	
    b := make([]int, 3)      // 定义一个长度为3,容量为3,元素为int类型的切片
    fmt.Println(a)           // [0 0 0]
    fmt.Println(len(a))      // 3
	fmt.
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/767745
推荐阅读
相关标签
  

闽ICP备14008679号