...
Valerie Luna
News, Business

golang 数组与切片区别

2019-03-26 10:48:21
Web Design Freebies

大家学习那么久,可能有些同学还不能区分数组(Array)和切片(Slice),啥使用有用数组?用切片?

现在下面讲解两者的区别

在Go语言中,数组(Array)和切片(Slice)是两种不同的数据类型,具有以下区别:

数组在内存中的布局是这样的:

golang 数组与切片区别

切片在内存中的布局是这样的:

golang 数组与切片区别

1. 固定长度 vs 可变长度:

   - 数组是固定长度的数据结构,一旦定义后,其长度就不能更改。

   - 切片是可变长度的数据结构,可以根据实际需要动态增加或缩小其长度。


2. 内存分配方式:

   - 数组在声明时会直接分配一块连续的内存空间,并且其大小是固定的。

   - 切片则是基于数组的封装,它本身并不存储任何数据,而是一个引用类型,指向底层数组的一部分。


3. 传递方式:

   - 数组在函数之间传递时,会进行值拷贝,即传递的是数组的副本。这可能导致较大的开销,特别是在数组较大时。

   - 切片在函数之间传递时,只会传递切片的引用,而不是整个底层数组的副本。这样可以避免复制整个数组,提高了性能。


4. 长度信息:

   - 数组的长度是其类型的一部分,例如`[5]int`和`[10]int`是两种不同类型的数组。

   - 切片没有指定长度,它包含一个指向底层数组的指针、长度和容量。


5. 操作方法和功能:

   - 数组的操作方法有限,主要支持基本的索引访问和遍历。

   - 切片具有更多的操作方法和功能,例如追加元素、删除元素、截取子切片等。


 数组是一种静态、固定长度的数据结构,而切片是一种动态、可变长度的数据结构,提供了更灵活的操作和管理方式。在实际开发中,切片通常更常用,因为它更方便、易于使用,并且能够动态适应不同的需求。

相关文章内容
  • 项目1
  • 项目2
  • 项目3
  • 项目4
  • 项目5
  • 项目6
1421480383 QQ二维码 扫描QQ二维码
微信号:xmj_Mr 微信二维码 扫描微信二维码
联系