美文网首页
Go之数组与切片

Go之数组与切片

作者: authetic_x | 来源:发表于2019-06-13 10:42 被阅读0次

数组

由固定长度的特定类型元素组成的序列,一个数组可由零或多个元素组成。默认情况下,数组的每个元素都被初始化为元素类型对应的零值。

初始化

var a = [3]int{1,2,3}
// 省略号表示数组的长度根据初始化值的个数来计算
var b = [...]int{1,2,3}
var c = [2]int{1,2}

a == c  // compile error

数组长度是数组类型的一个组成部分,因此 [3]int 和 [2]int 是两个不同的类型。数组的长度必须是常量表达式,因为数组的长度需要在编译阶段确定。

如果数组的元素类型是可以相互比较的,那么数组类型也是可以相互比较的

参数传递

func reverse1(a [3]int) {
    a[0], a[2] = a[2], a[0]
}

func reverse2(a *[3]int) {
    a[0], a[2] = a[2], a[0]
}

func main() {
    a := [3]int{1,2,3}
    reverse1(a)
    fmt.Println(a)  // [1 2 3]

    reverse2(&a)
    fmt.Println(a)  // [3 2 1]
}

从中可以看出,数组是一个值类型,将数组作为参数直接传递给函数只会复制数组的一个副本,这一点和 C 不同。

由于数组长度固定,是一个僵化类型,所以在Go语言中我们很少使用数组,更多的是用切片

Slice

Slice 代表变长的序列,序列中每个元素都有相同的类型。slice 是一个轻量级的数据结构,底层引用一个数组对象,一个 slice 由三个部分构成:指针、长度和容量。指针指向第一个 slice 元素对应底层数组的地址,长度对应 slice 元素的数目,容量一般是从 slice 开始位置到底层数据的结尾位置。

初始化

var array = [5]int{1,2,3,4,5}

var a = array[:]
var b = []int{1,2,3}
var c = []int(nil)  // c == nil, true
// 容量可省略,默认等于长度
var d = make([]int, 5)[:]
var e = make([]int, 5, 10)

slice 不可比较,唯一合法的是和 nil 比较,注意就算 slice 的长度和容量都为空,slice 也不一定为 nil,如var s = []int{}

append

用于向切片的末尾追加元素,当容量不足时,Go会采用一定的策略自动扩容,可以同时添加多个元素或切片

var s []int
s = append(s, 1, 2, 3)
var q []int
q = append(q, s...)

新的切片可能还会引用原来的底层数组,也可能会引用一个新创建的底层数组,取决于Go的内存策略

相关文章

  • Go之数组与切片

    数组 由固定长度的特定类型元素组成的序列,一个数组可由零或多个元素组成。默认情况下,数组的每个元素都被初始化为元素...

  • Go语言切片

    // //Go语言切片 // /* // go语言切片是对数组的抽象 // Go 数组的长度不可改变,在特定场景中...

  • Go语言第3天 - 常用数据类型

    以下内容部分参考自Go语言基础数据类型Go语言中的数组切片:特立独行的可变数组Go语言数据类型-数组Go标准容器之...

  • 第03天(复合类型)_03

    13_数组做函数参数.go 14_数组指针做函数参数.go 15_切片的长度和容量.go 16_切片的创建.go ...

  • go数组与切片

    数组 数组是具有相同唯一类型的一组长度固定的数据项序列,这种类型可以是任意的原始类型,例如整形,字符型或者自定义类...

  • 七、Go切片

    七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...

  • go语言数组、切片、映射

    go的一些语法有点晦涩,这些很基础,做一下笔记 数组 数组声明 数组声明初始化 切片 切片的声明 切片的追加 切片...

  • Go 切片和数组

    数组 go创建数组和 c 语言类似,有如下两种方式: 切片 切片声明和数组类似,只是没有传递长度 创建二维切片,并...

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • go数组切片

    go数组切片 主要知识点 数组(array)类型和切片(slice)都属于集合类的类型;他们最重要的不同是:数组类...

网友评论

      本文标题:Go之数组与切片

      本文链接:https://www.haomeiwen.com/subject/dnjjfctx.html