【GoLang基础】切片和数组有什么区别?

news/2024/9/23 8:14:25/

问题引出:

Go语言中的切片和数组有什么区别?

解答:

在 Go 语言中,切片(slice)和数组(array)是两种不同的数据类型,它们在使用和特性上有着明显的区别。

数组(Array)

  • 固定长度: 数组是一个固定长度的序列,定义时需要指定其长度。例如,var arr [5]int 声明了一个包含 5 个整数的数组。
  • 值类型: 数组是值类型,当传递数组给函数或赋值给另一个数组时,会进行一次完整的数组拷贝,包括所有元素。值传递
  • 大小不可变: 数组的长度在声明后无法更改。
  • 内存分配: 数组通常在栈上分配内存。
  • 基础数据类型: 数组属于基础数据类型,是一块连续的内存区域。

代码示例

var arr [5]int        // 声明一个包含 5 个整数的数组
arr[0] = 1
fmt.Println(arr)      // [1 0 0 0 0]

切片(Slice)

  • 动态长度: 切片是对数组的抽象,它可以动态增长和缩减,长度不固定。切片的长度是可以改变的。
  • 引用类型: 切片是引用类型,它包含三个信息:指向底层数组的指针、切片的长度和切片的容量。引用传递
  • 灵活性: 切片可以视情况指向数组的一部分或整个数组。
  • 传递效率: 切片作为引用类型传递时,不会复制底层数组,多个切片可以共享底层数组。
  • 动态增长: 当向切片追加元素时,如果超出了切片的容量,Go 会重新分配更大的底层数组,容量变为原来的2倍。

代码示例

arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4]     // 创建一个切片,引用arr的索引1到3的元素 [2 3 4]
fmt.Println(slice)    // 输出: [2 3 4]slice = append(slice, 6)  // 向切片追加元素
fmt.Println(slice)        // 输出: [2 3 4 6]
fmt.Println(arr)          // 输出: [1 2 3 4 5]fmt.Println(len(slice))   // 输出: 4 (切片的长度为 4)
fmt.Println(cap(slice))   // 输出: 4 (切片的容量为 4)

小结:

综上所述,切片是对数组的一种抽象,提供了更灵活、动态的序列处理能力,而数组是固定长度、值类型的基础数据类型。在实际开发中,切片更常用,因为它提供了更多的便利和灵活性。


http://www.ppmy.cn/news/1458798.html

相关文章

Windows平台通过MobaXterm远程登录安装在VMware上的Linux系统(CentOS)

MobaXterm是一个功能强大的远程计算工具,它提供了一个综合的远程终端和图形化的X11服务器。MobaXterm旨在简化远程计算任务,提供了许多有用的功能,使远程访问和管理远程服务器变得更加方便,它提供了一个强大的终端模拟器&#xff…

vue+ant-design+formBuiler表单构建器——技能提升——form design——亲测有效

最近看到后端同事在弄一个后台管理系统,额,前端真的是夹缝中生存啊,AI抢饭碗,后端也想干前端的活儿。。。 他用到了表单构建器,具体效果如下: 网上有很多适用于ElementUi和ant-design的form design插件,下…

[1726]java试飞任务规划管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java试飞任务规划管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql…

【Java基础】设计模式——单例设计模式

单例设计模式(Singleton Design Pattern)是一种创建型设计模式,它确保⼀个类有且只有⼀个实例,并提供一个全局访问点来访问这个唯一实例。 单例模式主要解决的是,⼀个全局使⽤的类频繁的创建和消费,从⽽提…

UML之用例图

1.用例图 用例图指参与者,用例,边界以及它们之间的关系构成的用于描述系统功能的视图。说明是谁要使用系统,以及可以使用该系统可以做些什么。展示了一个外部用户能够观察到的系统功能模型图 2.用例图的元素 (1)参与…

【计算机科学速成课】笔记三

文章目录 17.集成电路真空管时代晶体管时代集成电路时代印刷电路板时代光刻时代 17.集成电路 Over the past six episodes, we delved into software, 过去 6 集我们聊了软件 \N 从早期编程方式到现代软件工程 from early programming efforts to modern software engineerin…

Spring中的FileCopyUtils:文件复制的利器与详解

1. 概述 在Spring框架中,FileCopyUtils是一个用于文件复制操作的实用工具类。它提供了一系列静态方法,简化了文件从输入流到输出流、从文件到文件等的复制过程。这些方法都基于NIO(New I/O)技术,提供了高效的文件复制…

《21天学通C++》(第十四章) 宏和模板介绍(1)

1.使用#define定义常量 例子 #include <iostream> #include <string> using namespace std;#define ARRAY_LENGTH 25 #define PI 3.1415 #define MY_DOUBLE double #define FAV_WHISKY "Jack"int main() {int number [ARRAY_LENGTH]{0};cout<<&q…