脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - Go语言--切片(Slice)详解

Go语言--切片(Slice)详解

2021-11-19 13:58归子莫 Golang

这篇文章主要介绍了Go语言--切片(Slice),Go 语言切片是对数组的抽象,下面文章小编将为大家详细介绍该内容,需要的朋友可以参考下,希望对你有所帮

说明:

Go 语言切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

一、定义切片

注意:切片不需要说明长度

1、声明一个未指定大小的数组来定义切片

?
1
2
3
var identifier []type
//例如
var slice []int

2、使用make()函数来创建切片

?
1
2
3
4
5
var slice1 []type = make([]type, len)
//也可以简写为
slice1 := make([]type, len)
//例如
slice := make([]type, len)

二、切片是可索引的

1、len() 和 cap() 函数

可以由 len() 方法获取长度。

切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少

?
1
2
3
4
5
6
7
8
9
10
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

?
1
2
3
4
5
6
7
8
9
10
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]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)
}

结果:

Go语言--切片(Slice)详解

四、增加切片的容量

原理:创建一个新的更大的切片并把原分片的内容都拷贝过来

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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)
}

Go语言--切片(Slice)详解

到此这篇关于Go语言--切片(Slice)详解的文章就介绍到这了,更多相关Go语言切片(Slice)内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://zhuanlan.zhihu.com/p/137152510

延伸 · 阅读

精彩推荐
  • GolangGo语言实现自动填写古诗词实例代码

    Go语言实现自动填写古诗词实例代码

    这篇文章主要给大家介绍了关于Go语言实现自动填写古诗词的相关资料,这是最近在项目中遇到的一个需求,文中通过示例代码介绍的非常详细,需要的朋...

    FengY5862020-05-14
  • Golanggo语言获取系统盘符的方法

    go语言获取系统盘符的方法

    这篇文章主要介绍了go语言获取系统盘符的方法,涉及Go语言调用winapi获取系统硬件信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    无尽海3862020-04-24
  • Golang深入浅析Go中三个点(...)用法

    深入浅析Go中三个点(...)用法

    这篇文章主要介绍了深入浅析Go中三个点(...)用法,需要的朋友可以参考下...

    踏雪无痕SS6472021-11-17
  • GolangGolang实现四种负载均衡的算法(随机,轮询等)

    Golang实现四种负载均衡的算法(随机,轮询等)

    本文介绍了示例介绍了Golang 负载均衡的四种实现,主要包括了随机,轮询,加权轮询负载,一致性hash,感兴趣的小伙伴们可以参考一下...

    Gundy_8442021-08-09
  • GolangGo语言基础单元测试与性能测试示例详解

    Go语言基础单元测试与性能测试示例详解

    这篇文章主要为大家介绍了Go语言基础单元测试与性能测试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步...

    枫少文7812021-12-05
  • GolangGO语言字符串处理Strings包的函数使用示例讲解

    GO语言字符串处理Strings包的函数使用示例讲解

    这篇文章主要为大家介绍了GO语言字符串处理Strings包的函数使用示例讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加...

    Jeff的技术栈6882022-04-14
  • GolangGolang 语言极简类型转换库cast的使用详解

    Golang 语言极简类型转换库cast的使用详解

    本文我们通过 cast.ToString() 函数的使用,简单介绍了cast 的使用方法,除此之外,它还支持很多其他类型,在这没有多多介绍,对Golang 类型转换库 cast相关知...

    Golang语言开发栈6112021-12-02
  • GolangGo语言range关键字循环时的坑

    Go语言range关键字循环时的坑

    今天小编就为大家分享一篇关于Go语言range关键字循环时的坑,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    benben_20154202020-05-23