美文网首页
Golang 中数组(Array)和切片(Slice)的区别

Golang 中数组(Array)和切片(Slice)的区别

作者: 清十郎sama | 来源:发表于2020-01-02 15:04 被阅读0次

Go 中数组的长度是不可改变的,而 Slice 解决的就是对不定长数组的需求。他们的区别主要有两点。

区别一:初始化方式

数组:

a := [3]int{1,2,3} //指定长度
//or
a := [...]int{1,2,3} //不指定长度

切片:

s := make([]int, 3) //指定长度
//or
s := []int{1,2,3} //不指定长度

注意 1
虽然数组在初始化时也可以不指定长度,但 Go 语言会根据数组中元素个数自动设置数组长度,并且不可改变。切片通过 append 方法增加元素:

s := []int{1,2,3} //s = {1,2,3}
s = append(s, 4) //s = {1,2,3,4}

如果将 append 用在数组上,你将会收到报错:first argument to append must be slice。

注意 2
切片不只有长度(len)的概念,同时还有容量(cap)的概念。因此切片其实还有一个指定长度和容量的初始化方式:

s := make([]int, 3, 5)

这就初始化了一个长度为3,容量为5的切片。
此外,切片还可以从一个数组中初始化(可应用于如何将数组转换成切片):

a := [3]int{1,2,3}
s := a[:]

上述例子通过数组 a 初始化了一个切片 s。

区别二:函数传递

当切片和数组作为参数在函数(func)中传递时,数组传递的是值,而切片传递的是指针。因此当传入的切片在函数中被改变时,函数外的切片也会同时改变。相同的情况,函数外的数组则不会发生任何变化。

相关文章

  • Golang 中的数组 (array) 和切片 (slice)

    huangwenwei - 字里行间 | Golang 中的数组 (array) 和切片 (slice) 中文描述...

  • Golang 中数组(Array)和切片(Slice)的区别

    Go 中数组的长度是不可改变的,而 Slice 解决的就是对不定长数组的需求。他们的区别主要有两点。 区别一:初始...

  • Golang之数组和切片

    引用 数组、字符串和切片 Go数组中的索引问题 深入解析 Go 中 Slice 底层实现 Golang 入门 : ...

  • Go 语言极速入门3 - 内建容器

    内建容器Array 数组Slice 切片,是 Array 的一个 viewMap 映射 一、Array 数组 [1...

  • Learn Golang in 21 Days - Day 10

    Learn Golang in 21 Days - Day 10 知识点 切片Slice Slice是对数组的抽象...

  • 深入理解 Go Slice

    原文地址:深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特...

  • go数组切片

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

  • Golang 数组 切片

    Golang 数组和切片 go提供了相应数据类型来存储多个相同类型的元素。它们分别是数组和slice切片。其中,切...

  • golang切片

    切片是对数组的抽象 slice 总是指向底层的一个 array。 slice 是一个指向 array 的指针,这是...

  • js数组操作

    1、切片 slice()slice 方法返回一个 Array 对象,参数:start,截取数组开始下标。end截止...

网友评论

      本文标题:Golang 中数组(Array)和切片(Slice)的区别

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