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

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

延伸 · 阅读

精彩推荐
  • GolangGolang通脉之数据类型详情

    Golang通脉之数据类型详情

    这篇文章主要介绍了Golang通脉之数据类型,在编程语言中标识符就是定义的具有某种意义的词,比如变量名、常量名、函数名等等,Go语言中标识符允许由...

    4272021-11-24
  • Golanggolang如何使用struct的tag属性的详细介绍

    golang如何使用struct的tag属性的详细介绍

    这篇文章主要介绍了golang如何使用struct的tag属性的详细介绍,从例子说起,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看...

    Go语言中文网11352020-05-21
  • Golanggolang json.Marshal 特殊html字符被转义的解决方法

    golang json.Marshal 特殊html字符被转义的解决方法

    今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang的httpserver优雅重启方法详解

    golang的httpserver优雅重启方法详解

    这篇文章主要给大家介绍了关于golang的httpserver优雅重启的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    helight2992020-05-14
  • Golanggo日志系统logrus显示文件和行号的操作

    go日志系统logrus显示文件和行号的操作

    这篇文章主要介绍了go日志系统logrus显示文件和行号的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang中Bit数组的实现方式

    Golang中Bit数组的实现方式

    这篇文章主要介绍了Golang中Bit数组的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    天易独尊11682021-06-09
  • Golanggolang 通过ssh代理连接mysql的操作

    golang 通过ssh代理连接mysql的操作

    这篇文章主要介绍了golang 通过ssh代理连接mysql的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    a165861639710342021-03-08
  • Golanggo语言制作端口扫描器

    go语言制作端口扫描器

    本文给大家分享的是使用go语言编写的TCP端口扫描器,可以选择IP范围,扫描的端口,以及多线程,有需要的小伙伴可以参考下。 ...

    脚本之家3642020-04-25