当前位置: 首页 > news >正文

Go语言数组完全指南

概述

数组是Go语言中最基础的数据结构之一,它代表一段固定长度的连续内存空间,用于存储相同类型的元素序列。与切片(slice)不同的是,数组的长度在编译时就已确定,无法动态改变。在Go程序中,数组常用于需要精确控制内存分配或保证数据完整性的场景,如底层算法实现、硬件交互等。

数组与切片的主要区别

特性 数组 切片
长度 固定 可变
类型 值类型 引用类型
传递方式 完全拷贝 传递描述符
内存分配 栈或静态存储 堆分配
大小确定时机 编译时 运行时
性能特点 访问更快 操作更灵活
初始化 必须指定长度 可以动态创建

数组的定义与声明

Go语言中数组的声明方式多样,主要有以下几种形式:

// 1. 基本声明方式(未初始化,元素为零值)
var arr1 [3]int   // 声明长度为3的整型数组,初始值[0 0 0]// 2. 短变量声明并初始化
arr2 := [3]int{1, 2, 3}  // 显式初始化,值为[1 2 3]// 3. 使用...让编译器推断长度
arr3 := [...]int{4, 5, 6, 7}  // 编译器自动计算长度为4,值为[4 5 6 7]// 4. 指定索引初始化(稀疏数组)
arr4 := [5]int{1: 10, 3: 30}  // 只初始化索引1和3,其余为0,值为[0 10 0 30 0]// 5. 混合初始化(带索引和自动推断)
arr5 := [...]string{0: "Go", 2: "Python", 1: "Java"}  // 值为["Go" "Java" "Python"]

数组的特性

固定长度

数组长度是其类型的一部分,这意味着[3]int和[5]int是完全不同的类型,不能相互赋值或比较:

var x [3]int
var y [5]int
x = y // 编译错误:cannot use y (type [5]int) as type [3]int in assignmentfunc process(data [3]int) { /*...*/ }
data := [5]int{1,2,3,4,5}
process(data) // 编译错误:参数类型不匹配

值语义

数组是值类型,赋值或传递时会产生完整拷贝:

a := [2]int{1, 2}
b := a    // 创建数组a的完整副本
b[0] = 3 
http://www.dtcms.com/a/354786.html

相关文章:

  • 基于Springboot的酒店房间预订系统源码
  • More Effective C++ 条款13:以by reference方式捕捉exceptions
  • [Mysql数据库] 知识点总结5
  • 【C++游记】物种多样——谓之多态
  • 49个Docker自动化脚本:覆盖全场景运维,构建高可用容器体系
  • 【C初阶】文件操作
  • Claude Code 流畅使用指南
  • java中sleep与wait的区别
  • ES基础知识
  • PostgreSQL15——常用函数
  • docker一键部署!强大的本地音乐服务器NAS-Music
  • labelme的安装
  • 数据库服务-主从同步-高可用架构MHA
  • vue的动态组件keep-alive实现组件缓存和状态保留
  • 解锁制造业增长密码:MES如何适配行业特性?
  • Linux04:
  • Electron解压缩文件
  • 【实战笔记】OCI Ubuntu 24.04 + TigerVNC + XFCE + Chrome 开机自启全记录
  • [吾爱出品] windows桌面课程表
  • Kafka 4.0 五大 API 选型指南、依赖坐标、上手示例与最佳实践
  • AI智能教育新实践:从作业批改到薄弱项定位,构建个性化学习新路径
  • 深入理解QLabel:Qt中的文本与图像显示控件
  • 云计算学习100天-第30天
  • LaunchScreen是啥?AppDelegate是啥?SceneDelegate是啥?ContentView又是啥?Main.storyboard是啥?
  • 生成式 AI 的 “魔法”:以 GPT 为例,拆解大语言模型(LLM)的训练与推理过程
  • Java线程池深度解析:从原理到实战的完整指南
  • ABAP - CPI - pass header parameter and filter parameter to odata service
  • 【C语言】函数栈帧的创建与销毁
  • 引入资源即针对于不同的屏幕尺寸,调用不同的css文件
  • 开发避坑指南(41):Vue3 提示框proxy.$modal.msgSuccess()提示文本换行解决方案