开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :切片基本介绍和入门】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9634
切片基本介绍和入门
内容介绍:
一、需要切片的原因
二、切片的基本介绍
三、切片的基本使用
一、需要切片的原因
需求:需要一个数组用于保存学生成绩,但是学生的个数是不确定的,应该如何解决?(如果用数组,而数组的大小事固定的对于变化不一的情况不适用)
解决方案:使用切片(可以简单的理解成动态的数组;我们需要保存一组不确定的数据时就可以使用切片)
二、切片的基本介绍
1、切片的英文是 slice
2、切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。
3、切片的使用和数组类似,遍历切片、访间切片的元素和求切片长度 len(slice)都一样。(切片和数组基本相似,不完全一样;但在遍历切片,访问切片的元素和求切片的长度是一样的)
4、切片的长度是可以变化的,因此切片是一个可以动态变化数组。(这是跟数组的一个较大的区别,数组的长度不可变,如果数组元素过多他便越界,但切片会随着数据的增加而动态增长;切片不完全是一个数组)
5、切片定义的基本语法:
var 变量名[]类型 (在切片名中放的类型,中括号不需要填长度,中括号就表示一个切片)
比如: var a []int (表示 a 是一个切片的名称,这个切片可以放随机个 int 类型)
三、切片的基本使用
1. 在 chapter07里新建一个文件夹名为 slicedemo01,再在此文件下新建一个文件名为 main.go
(1)代码
package main
import (
"fmt"
func main
(){
//演示切片的基本使用
var intArr [5]int = [...]int[1,22,33,66,99)
//定义一个int数组,大小为5,初始化它为int{1,22,33,66,99};一共五个元素
slice := intArr[1:3] //声明/定义一个切片
//1. slice 就是切片名
//2. intArr[1:3]表示slice引用到intArr这个数组
//3.引用 intArr 数组的起始下标为1,最后的下标为3(但是不包含3);下标为1的元素是22,下标为3的元素是66,不包含下标为3就是取元素22和33
slice := intArr[1:3]
fmt.Print1n("
i
ntArr=", intArr)
fmt.Print
l
n("slice的元素是=", slice)
//22,33
fmt.Print
l
n( "slice的元素个数=", len(slice)) // 2
fmt.Println("slice 的容量=",cap(slice))
//切片的容量是可以动态变化,也就是当切片容量不够时它便会自动增长;一般来讲cap是长度的两倍,因为它的容量会预先增加,等空间不够再增加空间,效率会更高
}
(2)打开浏览器搜索“go语言标准库文档中文版“找到 bliutin,然后找到 cap 函数,出现以下内容:
内建函数 cap 返回 v 的容量,这取决于具体类型﹔
切片:切片的容里〈底层数组的长度〉;若 v 为 nil.cap(v)即为零
(切片的容量可以用 cap 来进行计算)
(3)运行以上代码,查看 slice 的元素、个数和容量
运行结果如下:
一般容量是个数的两倍;数组没有容量的概念。