这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

82 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

在Golang中数组与切片的异同

slice 的底层数据是数组,slice 是对数组的封装,它描述一个数组的片段。两者都可以通过下标来访问单个元素。
数组是定长的,长度定义好之后,不能再更改。在 Go 中,数组是不常见的,因为其长度是类型的一部分,限制了它的表达能力,比如 [3]int 和 [4]int 就是不同的类型。

可以通过代码查看[3]int和[4]int不是一种类型

func main() {
   var a [3]int
   var b [4]int
   fmt.Printf("%T %T\n", a, b)
   fmt.Println(reflect.TypeOf(a) == reflect.TypeOf(b))
}

输出:

[3]int [4]int
false
而切片则非常灵活,它可以动态地扩容。切片的类型和长度无关。
还有就是在方法、函数中传递数组时,由于golang只有值传递,且数组为基础数据类型,传递的将会是数组的每个元素的值,切片则传递的是引用的值。