作者:看那个码农
公众号:看那个码农
上期内容介绍了Go语言学习之数组|Go主题月
- 数组的定义
- 数组的声明
- 初始化数组
- 遍历数组元素
- 数组的一道典型案例
本篇内容将继续带领大家走进Go语言的世界。
1.本文简介
Go语言学习之使用切片
2.切片的使用
在Go语言中,数组是一个重要构件,但是使用切片的情况更多。
切片的内部结构包含地址、大小和容量。
切片一般用于快速地操作一块数据集合。如果将数据结合比做切糕的话,切片就是用户要的“那一块”。
切的过程包含从哪里开始(即切片的地址)及切多大(即切片的大小),容量可以理解为装切片的口袋大小。
如下图所示:
3.为什么要用切片?
在Go语言中,使用数组存在一定的局限性,无法直接向数组中添加元素,切片比数组灵活,,用户可以在切片中快速实现添加与删除元素操作。
4.声明切片
每一种类型都可以拥有其切片类型,表示多个类型元素的连续集合。切片类型的声明格式如下:
var name []T
- name表示切片类型的变量名
- T表示切片类型对应的元素类型。
5.使用make函数构造切片
如果需要动态创建一个切片,可以使用make内建函数,格式如下:
make([]T, size, cap)
- T:切片的元素类型
- size:就是为这个类型分配多少个元素
- cap:预分配的元素数量,这个值设定后不影响size,只是能提前分配空间,降低多次分配空间造成的性能问题。
如下面的案例所示:
package main
import (
"fmt"
)
func main(){
a := make([]int,2)
b := make([]int,2,10)
fmt.Printf("切片a的长度:%v,切片b的长度:%v",len(a),len(b))
}
输出为:
a和b均是预分配2个元素的切片,只是b的内部存储空间已经分配了10个,但实际使用了2个元素,容量不会影响当前的元素个数,因此a和b的长度都是2.
6.从数组或切片生成新的切片
切片默认指向一段连续内存区域,可以是数组,可以是切片本身。
常见的切片使用格式如下:
slice [开始位置:结束位置]
- slice:表示目标切片对象
- 开始位置表示对应目标切片对象的索引。
- 结束位置表示对应目标切片的结束索引。
如下面的案例所示:
package main
import (
"fmt"
)
func main(){
var a = [3]int{1,2,3}
fmt.Printf("数组:%v,处理后切片:%v",a,a[1:2])
}
输出为
7.表示原有的切片
生成切片的格式中,当开始和结束的位置都为空时
则生成的切片将表示和原切片一致的切片,并且生成的切片与原切片在数据内容上的一致。
具体代码实现如下:
package main
import (
"fmt"
)
func main(){
a := []int{1,2,3}
fmt.Printf("原有切片:%v,生成的切片:%v",a,a[:])
}
输出为
8.重置切片,清空拥有的元素
把切片的开始和结束位置都设为0时,生成的切片将变空
具体代码如下:
package main
import (
"fmt"
)
func main(){
a := []int{1,2,3}
fmt.Printf("原有切片:%v,清空后的切片:%v",a,a[0:0])
}
输出为
9.在切片中添加元素
Go语言使用内置函数append()可以为切片动态添加元素。
具体代码如下:
package main
import "fmt"
func main(){
var str = make([]string,2)
str[0] = "First"
str[1] = "Second"
fmt.Printf("原切片为:%v\n",str)
str =append(str,"Third")
fmt.Printf("增加元素后的切片为:%v",str)
}
输出为:
10.在切片中删除元素
在切片中删除元素,也可使用内置函数append()来完成。
删除元素的本质其实是以删除元素为分界点,将前后两个部分的内存重新连接起来。
代码删除的过程可以用下图来表示:
具体代码如下:
package main
import "fmt"
func main(){
str := []string{"a","b","c","d","e"}
index :=2
fmt.Printf("删除位置之前的元素:%v,\n删除的元素为:%v,\n删除位置之后的元素:%v,\n",str[:index],str[index],str[index+1:])
str=append(str[:index],str[index+1:]...)
fmt.Printf("删除元素后的切片为:%v",str)
}
输出为:
11.复制切片中的元素
要复制切片中的全部或者部分元素,可使用内置函数copy()。
在复制切片中的元素前,必须要再声明一个类型与该切片类型相同的切片
具体代码如下所示:
package main
import "fmt"
func main(){
var str=make([]string,2)
var copystr=make([]string,2)
str[0]="a"
str[1]="b"
copy(copystr,str)
fmt.Println(copystr)
}
输出为:
如果你觉得这篇内容对你有帮助的话:
1、点赞支持下吧,让更多的人也能看到这篇内容
2、关注公众号:看那个码农,我们一起学习一起进步。