Go语言--切片(Slice)详解
作者:归子莫 时间:2024-04-25 15:28:15
说明:
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
一、定义切片
注意:切片不需要说明长度
1、声明一个未指定大小的数组来定义切片
var identifier []type
//例如
var slice []int
2、使用make()函数来创建切片
var slice1 []type = make([]type, len)
//也可以简写为
slice1 := make([]type, len)
//例如
slice := make([]type, len)
二、切片是可索引的
1、len() 和 cap() 函数
可以由 len()
方法获取长度。
切片提供了计算容量的方法 cap()
可以测量切片最长可以达到多少
package main
import "fmt"
func main(){
var number = make([]int,3,5)
fmt.Printf("len=%d cap=%d slice=%v\n",len(number),cap(number),number)
}
//len=3 cap=5 slice=[0 0 0]
2、空(nil)切片
一个切片在未初始化之前默认为 nil,长度为 0
package main
import "fmt"
func main(){
var number []int
fmt.Printf("len=%d cap=%d slice=%v\n",len(number),cap(number),number)
}
//len=0 cap=0 slice=[]
三、切片截取
可以通过设置下限及上限来设置截取切片 [lower-bound:upper-bound]
package main
import "fmt"
func main() {
//创建切片
number := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
printSlice(number)
//打印原始切片
fmt.Println("number == ", number)
//打印子切片从索引1到索引4
fmt.Println("number == ", number[1:4])
//打印子切片默认下限
fmt.Println("number == ", number[:3])
//打印子切片默认上限
fmt.Println("number == ", number[4:])
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
结果:
四、增加切片的容量
原理:创建一个新的更大的切片并把原分片的内容都拷贝过来
append() 和 copy() 函数
package main
import (
"fmt"
)
func main() {
//创建切片
var number []int
printSlice(number)
//允许追加空切片
number = append(number,0)
printSlice(number)
//向切片添加一个元素
number = append(number,1)
printSlice(number)
//同时添加多个元素
number = append(number,2,3,4)
printSlice(number)
//创建的新的切片是之前的切片容量的两倍
number1 := make([]int,len(number),(cap(number))*2)
//拷贝number的内容到number1中
copy(number1,number)
printSlice(number1)
}
func printSlice(x []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
来源:https://zhuanlan.zhihu.com/p/137152510
标签:Go语言,切片,Slice
0
投稿
猜你喜欢
如何尽快释放掉Connection对象建立的连接?
2009-12-16 18:38:00
Django框架中模型的用法
2022-02-15 00:34:14
使用Python中的pytesseract模块实现抓取图片中文字
2021-05-06 18:10:28
JavaScript实现简单随机点名器
2024-04-10 16:18:39
美之鉴 – 女人与Web设计
2009-12-09 15:36:00
如何用用Python制作NFT区块链作品
2022-11-21 22:51:09
利用pyuic5将ui文件转换为py文件的方法
2023-03-20 05:01:43
Go中时间与时区问题的深入讲解
2024-02-19 23:34:55
使用Termux在手机上运行Python的详细过程
2021-10-26 10:23:52
Python使用win32 COM实现Excel的写入与保存功能示例
2021-03-30 11:28:50
对python中不同模块(函数、类、变量)的调用详解
2022-01-17 14:36:38
MySQL存储引擎简介及MyISAM和InnoDB的区别
2024-01-26 23:53:17
PHP实现二维数组中的查找算法小结
2023-09-08 05:08:24
SQL参数化查询的另一个理由 命中执行计划
2012-08-21 10:31:16
django时区问题的解决
2022-06-09 10:56:45
使用python制作一个解压缩软件
2023-04-27 19:08:37
python排序算法之希尔排序
2023-03-03 13:50:48
9种python web 程序的部署方式小结
2021-04-14 10:39:44
python实现定时发送qq消息
2021-08-17 00:10:34
SQL常用的四个排序函数梳理
2024-01-13 04:41:49