首页 IT综合 正文 golang基础教程(八)、切片 时间:2019-02-14作者:klpeng分类:IT综合浏览:13062评论:0
golang基础教程
一、切片的基本介绍 切片的英文是 slice 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。 切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度 len(slice)都一样。 切片的长度是可以变化的,因此切片是一个可以动态变化数组。 切片定义的基本语法: var 切片名 []类型 比如:var a [] int示例:
func main() { var arr = [...]string{"张学友","刘德华","黎明","郭富城","成龙","周星驰"} slice :=arr[1:3:5] fmt.Printf("slice容量:%d,长度:%d,值:%v\n",cap(slice),len(slice),slice) fmt.Printf("slice地址:%p",slice) } slice容量:4,长度:2,值:[刘德华 黎明] slice地址:0xc000084130 二、切片在内存中形式总结: 从上面可以看到
slice的确是一个引用类型 slice 从底层来说,其实就是一个数据结构(struct结构体) type slice struct { ptr *[2]int len int cap int } 三、切片的使用 1、切片的定义 第一种方式定义一个切片,然后让切片去引用一个已经创建好的数组,比如前面的案例就是这 样的。
slice :=arr[a:b:c]a:起始位置 b:截取数据的结束位置 默认到末端) c:截取后的容量位置 默认到末端) slice的len = b - a slice的cap = c - a 底层数组: 为原数组的下标a到下标b(不包括)的所有元素
第二种方式:通过 make 来创建切片 基本语法:var 切片名 []type = make([]type, len, [cap])
参数说明: type: 就是数据类型 len : 大小 cap :指定切片容量,可选, 如果你分配了 cap,则要求 cap>=len.
func main() { slice :=make([]int,3,5) slice[0] = 100 slice[1] = 200 slice[2] = 300 fmt.Printf("slice容量:%d,长度:%d,值:%v\n",cap(slice),len(slice),slice) fmt.Printf("slice地址:%p\n",slice) //slice[3] = 400 //runtime error: index out of range 报错 slice = append(slice, 400) slice = append(slice, 500) fmt.Printf("slice容量:%d,长度:%d,值:%v\n",cap(slice),len(slice),slice) fmt.Printf("slice地址:%p\n",slice) slice = append(slice, 600) fmt.Printf("slice容量:%d,长度:%d,值:%v\n",cap(slice),len(slice),slice) fmt.Printf("slice地址:%p",slice) } slice容量:5,长度:3,值:[100 200 300] slice地址:0xc000016120 slice容量:5,长度:5,值:[100 200 300 400 500] slice地址:0xc000016120 slice容量:10,长度:6,值:[100 200 300 400 500 600] slice地址:0xc000074000总结: (1) 通过 make 方式创建切片可以指定切片的大小和容量 (2) 如果没有给切片的各个元素赋值,那么就会使用默认值[int , float=> 0 string =>”” bool => false] (3) 通过 make 方式创建的切片对应的数组是由 make 底层维护,对外不可见,即只能通过 slice 去 访问各个元素
与第一种方式的区别:
第 3 种方式定义一个切片,直接就指定具体数组,使用原理类似 make 的方式
func main() { slice :=[]string{"张学友","刘德华","黎明","郭富城","成龙","周星驰"} fmt.Printf("slice容量:%d,长度:%d,值:%v\n",cap(slice),len(slice),slice) fmt.Printf("slice地址:%p",slice) } slice容量:6,长度:6,值:[张学友 刘德华 黎明 郭富城 成龙 周星驰] slice地址:0xc000052180 四、切片的遍历切片的遍历和数组一样,也有两种方式
for 循环常规方式 遍历for-range 结构遍历 func main() { slice :=[]string{"张学友","刘德华","黎明","郭富城","成龙","周星驰"} fmt.Println("常规方式") for i:=0; i fmt.Printf("%d ===> %v\n",index,value) } } 打赏微信扫一扫,打赏作者吧~文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。 继续浏览有关 golanggo基础教程 的文章 上一篇:golang基础教程 下一篇:golang基础教程(九)、map 相关推荐 C/C++求汉诺塔递归深度,步数,移动的轨迹 解决IDEA启动tomcat控制台乱码 高等数学-求曲线拐点 Thymeleaf入门 高等数学-用等价无穷小求极限题集 IDEA DataSource远程连接Mysql及其完整使用流程 C/C++中的#define和typedef Centos7.4编译安装php8.1 C++使用数组求 L1-005 考试座位号 (15 分) Vue中的ref和$refs发表评论:取消回复
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
猜你喜欢 08月04日 Golang之go mod 作者:klpeng 分类:IT综合 浏览:891 评论:0当我们在Centos上安装好Golang,默认的编写的代码都存放在/root/go/src目录下,这是Golang原有的机制,从Go11开始,我们可以在任一目录下进行开发,使用go mod机制来管理我们的项目。查看 http...
Tag:go 07月28日 Golang学习资料汇总 作者:klpeng 分类:IT综合 浏览:447 评论:0go语言圣经 一份很好的go学习笔记 golang笔记 The Way to Go 中文正式名《Go 入门指南》 go中文开发手册 go语言高级编程 go标准库 煎鱼的博客 https:...
Tag:go 07月28日 Golang使用第三方包viper读取yaml配置信息 作者:klpeng 分类:IT综合 浏览:8268 评论:0Golang有很多第三方包,其中的 viper 支持读取多种配置文件信息。本文只是做一个小小demo,用来学习入门用的。 1、安装 go get github.com/spf13/viper 2、编写一个yaml的配置文件,co...
Tag:go 07月28日 Golang实现json的序列化和反序列化 作者:klpeng 分类:IT综合 浏览:2066 评论:0Golang的标准库中"encoding/json"包含了对json的处理,Golang的数据类型与json的类型的转化规则为: Golang 数据类型 JSON 数据类型 bool Boolean int、float Nu...
Tag:go 07月09日 Go交叉编译 作者:klpeng 分类:IT综合 浏览:502 评论:0Golang的交叉编译要保证golang版本在1.5以上 windows上编译linux可执行文件: SET GOOS=linux SET GOARCH=amd64 go build main.go linux上编译windows可...
Tag:go