Go语言基础:切片slice的声明及使用

前言

大家好,我是沐风晓月,本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言,持续更新中,欢迎点赞收藏。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家
😉😉 💕 座右铭:先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信

在这里插入图片描述

一. 切片的定义

1.1 切片的定义和特点

Go语言中的切片,是一种动态数组,它是对数组的引用,切片本身并不存储任何数据,它只是描述了数组中的一段。

切片有如下几个特点:

  • 与数组相⽐,切⽚的⻓度是不固定的,可以追加元素,在追加时可能使切⽚的容量增⼤。
  • 切⽚本身没有任何数据,它们只是对现有数组的引⽤。
  • 切⽚与数组相⽐,不需要设定⻓度,在[]中不⽤设定值,相对来说⽐较⾃由。
  • 切片是引用类型,默认值为nill
  • 切片的索引也是从零开始
  • 切片的遍历方式与数组相同

从概念上⾯来说slice像⼀个结构体,这个结构体包含了三个元素:

1)指针,指向数组中slice指定的开始位置;
2)长度,即slice的当前⻓度;
3)容量,也就是slice所容纳的最大元素个数。

1.2 切片的结构

切片是一种数据类型,这种数据类型便于使用和管理数据集合。

首先我们需要明白切片的结构。slice在Go的运行时库中就是一个C语言动态数组的实现:

type slice struct {
   
    ptr *array  //底层存储数组
    len int     //当前存储了多少个元素
    cap int     //底层数组可以存储多少个元素(从ptr指向的位置开始)
}

这个结构有3个字段,第一个字段表示array的指针,就是真实数据的指针(这个一定要注意),第二个是表示slice的长度,第三个是表示slice的容量,特别需要注意的是:

1.slice的长度和容量都不是指针
2.切片操作并不复制切片指向的元素。它创建一个新的切片并复用原来切片的底层数组。

切片操作并不复制切片指向的元素。它创建一个新的切片并复用原来切片的底层数组。 使得切片操作和数组索引一样高效。因此,通过一个新切片修改元素会影响到原始切片的对应元素。

切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。

在这里插入图片描述
这 3 个字段分别是指向底层数组的指针、切片访问的元素的个数(即长度)和切片允许增长到的元素个数(即容量)。

二. 切片的声明和初始化

2.1 声明切片

1. 声明一个未指定长度的数组来定义切片

语法:

var slicename []type
  • slicename : 表示变量名

需要注意的是: 该声明⽅式中未初始化的切⽚为空切⽚。该切⽚默认为 nil,⻓度为 0。

package main

import "fmt"

func main() {
   
	var a []string  //声明一个字符串切片
	var b = []int{
   } // 声明一个整数切片并初始化

	fmt.Println(a, b, a == nil) // 执行结果 [] [] true


}

2. 使用make()的方式声明切片

语法:

var slice1 []type = make([]type, len, cap)
//type 表示切片的元素类型
//len 表示切片中元素的数量
//cap 表示切片的最大容量

可进行缩写:

- var slice1 []type = make([]type, len)
- 可以简写为: slice1 := make([]type, len)

案例一:使用make直接定义切片

package main

import "fmt"

func main() {
   
	var mufeng2 []int = make([]int, 5, 7)
	var mufeng2 []int = make([]int, 5) // 缩写

	fmt.Println(mufeng2)

}

//执行结果: [0 0 0 0 0]

案例二:使用make定义并获相应的len,cap

package main

import "fmt"

f
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值