当前位置:网站首页>【愚公系列】2022年07月 Go教学课程 021-Go容器之切片操作
【愚公系列】2022年07月 Go教学课程 021-Go容器之切片操作
2022-07-30 07:47:00 【愚公搬代码】
一、切片操作
1.切片
切片和数组类似,都是数据集合。和数组不同的是,切片是一块动态分配大小的连续空间。
2.切片的使用
2.1 切片的格式
var 变量名 []T //T 表示切片类型。
相关案例:
package main
import "fmt"
func main() {
// 声明整型切片
var numList []int
// 声明字符串切片
var strList []string
// 声明一个空切片, {} 表示已经分配内存,但是切片里面的元素是空的
var numListEmpty = []int{
}
// 输出3个切片
fmt.Println(numList, strList, numListEmpty)
// 输出3个切片大小
fmt.Println(len(numList), len(strList), len(numListEmpty))
// 切片判定是否为空结果
fmt.Println(numList == nil)
fmt.Println(strList == nil)
fmt.Println(numListEmpty == nil)
}

2.2 make() 函数定义元素
//T : 切片中元素的类型;
//size : 表示为这个类型分配多少个元素;
//cap : 预分配的元素数量,该值设定后不影响 size, 表示提前分配的空间,设置它主要用于降低动态扩容时,造成的性能问题。
make( []T, size, cap )
相关案例:
package main
import "fmt"
func main() {
a := make([]int, 10)
b := make([]int, 10, 20)
fmt.Println(a, b)
fmt.Println(len(a), len(b))
}

3.append() 函数增加元素
Go 语言中的内置函数 append() 可以为切片动态添加元素, 案例如下:
package main
import "fmt"
func main() {
// 声明一个字符串类型的切片
var strList []string
// 循环动态向 strList 切片中添加 20 个元素,并打印相关参数
for i := 0; i < 10; i++ {
line := fmt.Sprintf("愚公 %d", i)
strList = append(strList, line)
fmt.Printf("len: %d, cap: %d, pointer: %p, content: %s\n", len(strList), cap(strList), strList, strList[i])
}
// 添加切片
list := []string{
"愚公 10", "愚公 11"}
// list 后面的 ... 表示将 list 整个添加到 strList 切片中
strList = append(strList, list...)
fmt.Println(strList)
}

4.切片截取
slice [开始位置:结束位置]
- slice 表示切片。
- 开始位置和结束位置对应目标切片的下标。
相关案例:
package main
import "fmt"
func main() {
// 添加切片
list := []string{
"愚公 10", "愚公 11", "愚公 12"}
// list 后面的 ... 表示将 list 整个添加到 strList 切片中
fmt.Println(list, list[1:2])
}

package main
import "fmt"
func main() {
// 添加切片
list := []string{
"愚公 10", "愚公 11", "愚公 12"}
// list 后面的 ... 表示将 list 整个添加到 strList 切片中
fmt.Println(list, list[1:2], list[1:], list[:2], list[:])
}

- 若不填写结束位置,如 list[1:], 则表示从下标 1 置到数组的结束位置。
- 若不填写开始位置,如 list[:2],则表示从 0 到下标 2的位置。
- 若开始位置和结束位置都不填写,如 list[:], 则会生成一个和原有切片一样的切片。
5.切片复制
copy( 原切片, 目标切片 []T) int
相关案例:
package main
import "fmt"
func main() {
// 设置元素数量为 10
const count = 10
// 源分片
list1 := make([]int, count)
// 给源分片赋值
for i := 0; i < count; i++ {
list1[i] = i
}
// 目标分片
list2 := make([]int, count)
// 将 srcSlice 分片的数据复制到 destSlice 中
copy(list2, list1)
fmt.Println(list1)
fmt.Println(list2)
}

6.切片删除
Go 语言中并没有提供特定的函数来删除切片中元素,可以利用append来实现切片拼接来删除。
package main
import "fmt"
func main() {
// 声明一个字符串类型的切片
arr := []string{
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}
// 打印删除位置之前和之后的元素, arr[:index] 表示的是被删除元素的前面部分数据,arr[index+1:] 表示的是被删除元素后面的数据
fmt.Println(arr[:1], arr[2:])
// 将删除点前后的元素拼接起来
arr = append(arr[:1], arr[2:]...)
fmt.Println(arr)
}

边栏推荐
- Thinking about digital transformation of construction enterprises in 2022, the road to digital transformation of construction enterprises
- Lenovo Notebook How to Change Windows 10 Boot Logo Icon
- test2
- SOFA Weekly|Meetup 广州站、本周 QA、本周 Contributor
- redis的内存淘汰策略
- Selected as one of the "Top Ten Hard Core Technologies", explaining the technical points of Trusted Confidential Computing (TECC) in detail
- The full arrangement of the 46th question in C language.Backtracking
- 【小程序专栏】总结uniapp开发小程序的开发规范
- 【蓝桥杯选拔赛真题45】Scratch猫鼠游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
- 手把手教学OneOS FOTA升级
猜你喜欢

The difference between typescript3-ts and js
![elk报错:[syslogs] index has exceeded [1000000]](/img/f0/45871609ccf25c2bdd0f3ad239ceb7.png)
elk报错:[syslogs] index has exceeded [1000000]

ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力

剖析SGI STL空间配置器(_S_refill内存块填充函数)
![[Unity]UI切换环形滚动效果](/img/8d/5d139369285f3c49e3695d96c81d60.png)
[Unity]UI切换环形滚动效果

基于SSM实现个性化健康饮食推荐系统

function (1)
![[Mini Program Column] Summarize the development specifications of uniapp to develop small programs](/img/7b/110d324eba00652e4987bc623a5bc6.png)
[Mini Program Column] Summarize the development specifications of uniapp to develop small programs

剖析SGI STL空间配置器(allocate内存分配函数)

Charles通过Rewrite越过OPTIONS请求拦截
随机推荐
出网判断:
SQL injection vulnerability (postgresql injection)
你好,我的新名字叫 “铜锁 / Tongsuo”
用代码收集每天热点内容信息,并发送到自己的邮箱
【无标题】
[GAN]老照片修复Bringing Old Photos Back to Life论文总结
求大佬解答,这种 sql 应该怎么写?
typescript6 - simplify the steps to run ts
typescript3-ts对比js的差别
MongoDB - 千万级数据脚本过滤笔记
香港服务器iis配置web服务器如何操作?
Alibaba Cloud Cloud Server Firewall Settings
防止资源导出失败
孙洪鹤讲教材:原点+众筹+产品,逆向营销实战操作方案
JS中对事件流的理解
cmd命令
npm指令
39.【vector动态数组定义及初始化】
开创ETC生态建设新格局 JASMINER新一批X4服务器陆续发出
如何组装一个注册中心