使用切片的三种方式|学习笔记

简介: 快速学习使用切片的三种方式。

开发者学堂课程【GO 语言核心编程-基础语法、数组、切片、Map:使用切片的三种方式学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9638


使用切片的三种方式

 

内容介绍:

一、 方式1

一、 方式二2

一、 方式三3

 

切片的使用

 

一、方式1

第一种方式:定义一个切片,然后让切片去引用一个已经创建好的数组,比如前面的案列就是这样的。

案例:

func main() {

var arr [5]int = […]int{1,2,3,6,5}  //已经创建好的数组

var slice = arr[1:3]  //使用 slice 引用已经创建好的数组

fmt.Println(“arr=”,arr)

fmt.Println(“slice=”,slice)

fmt.Println(“slice len = ”, len(slice))

fmt.Println(“slice cap = ”, cap(slice))

}

 

二.方式2

第二种方式:通过 make 来创建切片 //使用内置函数直接创建切片

1基本语法:var 切片名[]type = make([]type,len,[cap])

2参数说明:type就是数据类型 len:大小 cap:指定切片容量,可选

//如果分配了 cap,则要求 cap>=len,否则语法是错误的

3案例:

func main() {

var slice []int = make([]int,4,10)  

//切片的数据类型是[]中间不写任何数据,然后后面的 make 部分中有三个参数需要写,第一个参数是切片的类型,第二个参数是切片的大小,第三个参数是指定切片的容量

fmt.Println(slice)  

//在默认情况下切片中元素的默认值为0

fmt.Println("slice len=",len(slice),"slice cap=",cap(slice))

slice[0] = 100  

//如果要访问一个切片或者修改切片中的值,可以通过切片名访问下标名的方式来访问切片元素,从而修改值。

slice[2] = 200  

//访问切片中的第三个元素

fmt.Println(slice)

}

打开手册找到 make 函数,对于 make 函数的介绍为:
内建函数make分配并初始化一个类型为切片、映射、或通道的对象。其第一个实参为类型,而非值。make 的返回类型与其参数相同,而非指向它的指针。其具体结果取决于具体的类型。

//make 不但可以创建切片,还可以创建 map 或者通道

切片: size 指定了其长度。该切片的容量等于其长度。切片支持第二个整数实参可用来指定不同的容量它必须不小于其长度,因此 make([ ]int,0,10)会分配一个长度为0容量为10的切片。

4示例:

新建一个文件夹为 sliceuse,新建一个文件叫做 main.go

package main

import (

“fmt”

)

func main() {

//演示切片的使用 make

var slice []float64  //定义一个切片名为 slice,类型为 float64

//注意:如果是切片,直接使用 make 的话会出现错误

//对于切片,必须编写 make 之后再进行使用

fmt.Println(slice)

直接将 slice 进行输出,运行结果如下:

image.png

会发现在[]中没有任何东西

5如果使用 make:

var slice []float64 = make([]float64,5,10)  //定义五个元素和容量为10

再进行运行,效果如下:

image.png

可以看到5个元素出现,且他们的值都为0,因为没有将元素赋值,所以默认值为0。

6将 slice 赋值

slice[1] = 10 //将 slice 第2个元素赋值为10

slice[3] = 20  //将 slice 第4个元素赋值为20

运行结果如下:

 image.png

对应的元素的值发生了变化

7fmt.Println("slice的size=",len(slice)) //输出 slice 的大小

fmt.Println("slice的cap=",cap(slice))  //输出 slice 的容量

输出结果如下:

image.png

可以得出,5为 slice 的大小,10为 slice 的容量

问题:如果用此方法使用 slice 在内存中是如何存在的呢?

答:

slice 的内存图:

//slice 仍然指向一个包含五个元素的空间,但是不会再有一个数组指向下方的空间,下方空间的数据只能通过 slice 来进行访问,且此数组对外是不可见的,程序员只能通过 slice 操作其元素,而无法通过数组操作里面的元素了。

image.png

8对上面代码的小结

通过 make 方式创建切片可以指定切片的大小和容量

如果没有给切片的各个元素赋值,那么就会使用默认值[int, float=>0 string=>“”, bool=> false]

通过 make 方式创建的切片对应的数组是由 make 底层维护,对外不可见,即只能通过 slice 去访问各个元素。

 

三.方式3

第三种方式:定义一个切片,直接就指定具体数组,使用原理类似 make 的方式。

1案例:
func main() {

var slice []int = []int {1,3,5} //直接将切片的数组给 slice

fmt.Println(slice)

}

2示例:

fmt.Println() //换行
var strSlice []string = []string{“tom”,”jack”,”mary”} //直接进行分配、

fmt.Println(“strSlice”, strSlice)

fmt.Println(“strSlice size”, len(strSlice)) //输出大小

//返回值为3

fmt.Println(“strSlice cap”, cap(strSlice)) //输出容量

运行效果如下:

image.png

因为没有指定大小,所以 slice 的大小为3。

相关文章
|
8月前
|
机器人 API 数据安全/隐私保护
【最佳实践系列】通过AppFlow,支持飞书机器人调用阿里云百炼应用
本文介绍了如何创建并配置飞书应用及机器人,主要包括三个步骤:1. 登录飞书开发者后台,创建企业自建应用并添加机器人卡片和API权限;2. 创建AppFlow连接流,配置飞书平台凭证和阿里云百炼鉴权凭证,发布WebhookUrl,并在飞书开放平台配置事件订阅;3. 将机器人添加到群聊中,通过@机器人实现互动。以及通过AppFlow连接流集成阿里云百炼应用服务。此过程详细描述了从应用创建到机器人添加的全流程,帮助开发者快速集成飞书机器人功能。
1601 10
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
596 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
1055 4
|
前端开发
边框也疯狂:CSS创造令人瞩目的流光闪烁效果!
边框也疯狂:CSS创造令人瞩目的流光闪烁效果!
|
Ubuntu Linux Shell
树莓派ubuntu镜像备份详细教程
本文是关于树莓派Ubuntu镜像备份的详细教程,包括如何获取镜像、使用PiShrink工具减小镜像体积的步骤和命令,以及相关参数的说明。
430 0
|
弹性计算
2024阿里云服务器带宽计费价格表_流量费用_固定带宽报价
2024阿里云服务器带宽计费价格表_流量费用_固定带宽报价,北京地域服务器按固定带宽计费一个月23元/M,按使用流量计费0.8元/GB
1218 5
|
设计模式 缓存 算法
必知必会的22种设计模式(GO语言)
必知必会的22种设计模式(GO语言)
584 1
|
弹性计算
阿里云服务器“带宽计费模式”详细说明_2024固定带宽和流量详解
阿里云服务器“带宽计费模式”详细说明_2024固定带宽和流量详解,按固定带宽是指直接购买多少M带宽,比如1M、5M、10M、100M等,阿里云直接分配用户所购买的带宽值,根据带宽大小先付费再使用;按使用流量是先设置一个带宽峰值,然后根据实际公网产生的出流量来计算费用,先使用后付费
1265 1
|
Go 开发者
Go语言代码优雅之道:简洁、清晰示例驱动
Go语言代码优雅之道:简洁、清晰示例驱动
280 0
|
人工智能 搜索推荐 Linux
一个集 AI + 工具 + 插件 + 社区为一体的Arc 浏览器风格AI客户端
一个集 AI + 工具 + 插件 + 社区为一体的Arc 浏览器风格AI客户端
508 0