当前位置: 首页 > 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.xdnf.cn/news/1379143.html

相关文章:

  • 部署 Go 项目的 N 种方法
  • MyBatis题
  • 前端开发中的CSS变量管理:实现缓存与响应式更新
  • PostgreSQL15——常用函数
  • 农行广西区分行携手广西专精特新商会共探金融赋能专精特新企业新路径
  • Milvus 向量数据库开发实战指南
  • 基于Vue2+elementUi实现树形 横向 合并 table不规则表格
  • 现代前端状态管理:从原理到实战(Vue/React全栈方案)
  • 笔记本电脑蓝牙搜索不到设备-已解决
  • 算法之排序
  • 媒体查询案例之修改背景颜色
  • 从枯燥C++到趣味音乐:我的Windows系统底层探索之旅
  • TypeScript:never类型
  • C++ RAII 浅谈
  • 从Cgroups精准调控到LXC容器全流程操作​:用pidstat/stress测试Cgroups限流,手把手玩转Ubuntu LXC容器全流程​
  • 冒泡排序算法详解(python code)
  • Two Knights (数学)
  • 大模型微调示例三之Llama-Factory_Lora
  • 【C++详解】用哈希表封装实现myunordered_map和 myunordered_set
  • Kubernetes一Prometheus概述
  • [linux仓库]透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
  • [调试][实现][原理]用Golang实现建议断点调试器
  • 获取小红书某个用户列表
  • 【LeetCode 热题 100】32. 最长有效括号——(解法二)动态规划
  • 集成电路学习:什么是TensorFlow
  • AI实时故障诊断系统(实时采集信号)
  • Python 正则表达式完全指南:从基础语法到实战案例
  • 【从0带做】基于Springboot3+Vue3的呱呱同城(微服务项目)
  • 实现微信小程序的UniApp相机组件:拍照、录像与双指缩放
  • ARM相关的基础概念和寄存器