Go语言array如何初始化_Go语言数组使用教程【收藏】

陌萱小哥_9654

陌萱小哥_9654

2026-05-25

218人浏览

原创

go中[3]int是固定长度数组,[]int是切片;数组长度是类型一部分,不同长度不可互赋;初始化时未显式赋值的元素自动为零值,复合字面量支持索引指定和部分赋值。

go语言array如何初始化_go语言数组使用教程【收藏】

Go 语言里写 [3]int 和 []int 看起来只差一对方括号,但语义完全不同:前者是固定长度的数组类型,后者是切片(slice)——而绝大多数人实际想要的、能直接传参/扩容/赋值的,其实是后者。真要用数组,必须清楚它不可变、会整块拷贝、不同长度就是不同类型。

声明时指定长度并留空,所有元素自动为零值

这是最基础也最容易被忽略“初始化”含义的方式。所谓“初始化”,不一定要显式赋值;只要声明完成,内存就已分配,每个元素按类型填入零值。

  • var a [5]int → 全是 0,不是未定义
  • var s [3]string → 全是 ""
  • var b [2]*int → 全是 nil

这种写法适合后续用循环或单个索引逐步赋值,比如读取固定长度的二进制头信息、预分配缓冲区等场景。注意:此时不能用 len(a) 以外的方式获取长度——数组长度是类型的一部分,cap(a) 会报错。

用复合字面量初始化,支持部分赋值和索引指定

Go 允许在初始化时只给前几个元素赋值,其余保持零值;也能跳着指定下标,编译器自动推导总长度。

  • a := [5]int{1, 2} → 等价于 [5]int{1, 2, 0, 0, 0}
  • b := [5]int{1: 10, 3: 30} → 等价于 [5]int{0, 10, 0, 30, 0}
  • c := [5]int{0: 100, 4: 500} → 首尾指定,中间全零

关键点:一旦用了索引(如 1:),就必须带冒号;没带冒号的值默认按顺序填到下一个空位;最大索引决定数组长度,哪怕中间全是零值。容易踩坑的是误以为 [5]int{1:10} 是“只初始化第二个”,其实它生成的是长度为 5 的数组,不是长度为 2。

用 []T{...} 写法时,你得到的不是数组而是切片

这是最常被误解的一点。写 arr := []int{1, 2, 3},arr 的类型是 []int(切片),不是 [3]int(数组)。它底层指向一个匿名数组,但行为完全由切片规则控制:可追加、可传递、不会整块拷贝。

Go语言(Golang)1.26.0
Go语言(Golang)1.26.0

Go语言(Golang)1.26.0版本官方下载,版本号 1.26.0,适合旧项目维护、兼容性测试和指定版本开发环境搭建。

下载
  • 想传给只接受 [3]int 的函数?不行,类型不匹配
  • 想取地址传给 *[3]int?可以,但得显式转换:&[3]int{1,2,3}
  • 想确认是不是数组?用 fmt.Printf("%T", arr) 看输出

真正需要数组的场合极少,比如 CGO 交互、内存对齐要求严格的结构体字段、或实现某些底层协议头。日常开发中,95% 的情况该用切片。

二维数组初始化必须用嵌套大括号,且每行末尾要逗号

二维数组本质是“数组的数组”,初始化语法严格。漏掉逗号或括号层级错,编译直接失败。

matrix := [2][3]int{
	{1, 2, 3}, // 这行末尾必须有逗号
	{4, 5, 6}, // 同样
}

如果只初始化部分行或列:

  • [2][3]int{{1}, {4, 5}} → 第一行是 [3]int{1, 0, 0},第二行是 [3]int{4, 5, 0}
  • [2][3]int{1: {4, 5}} → 第一行全零,第二行前两个为 4、5,第三个为 0

别试图用 [][]int 初始化二维数组——那是个切片的切片,和二维数组内存布局、类型兼容性都不同。需要固定行列时,必须用 [N][M]T 形式。

数组真正的复杂点不在语法,而在它的“类型即长度”特性:两个数组变量即使元素类型和值完全一样,只要长度不同,就不能互相赋值、不能作为同一函数参数传入、甚至无法用同一个接口接收。这点在泛型约束或反射操作时会突然暴露出来,而且错误信息往往不提示“长度不匹配”,只说“类型不一致”。

golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

go语言

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Go中Type关键字的用法
Go中Type关键字的用法

Go中Type关键字的用法有定义新的类型别名或者创建新的结构体类型。本专题为大家提供Go相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.06

2589

5

go怎么实现链表
go怎么实现链表

go通过定义一个节点结构体、定义一个链表结构体、定义一些方法来操作链表、实现一个方法来删除链表中的一个节点和实现一个方法来打印链表中的所有节点的方法实现链表。

2023.09.25

5127

6

go语言编程软件有哪些
go语言编程软件有哪些

go语言编程软件有Go编译器、Go开发环境、Go包管理器、Go测试框架、Go文档生成器、Go代码质量工具和Go性能分析工具等。本专题为大家提供go语言相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.13

662

5

0基础如何学go语言
0基础如何学go语言

0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。php中文网给大家带来了go语言相关的教程以及文章,欢迎大家前来学习。

2023.10.26

6885

20

Go语言实现运算符重载有哪些方法
Go语言实现运算符重载有哪些方法

Go语言不支持运算符重载,但可以通过一些方法来模拟运算符重载的效果。使用函数重载来模拟运算符重载,可以为不同的类型定义不同的函数,以实现类似运算符重载的效果,通过函数重载,可以为不同的类型实现不同的操作。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2416

5

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2664

5

go语言开发工具大全
go语言开发工具大全

本专题整合了go语言开发工具大全,想了解更多相关详细内容,请阅读下面的文章。

2025.06.11

5839

12

go语言引用传递
go语言引用传递

本专题整合了go语言引用传递机制,想了解更多相关内容,请阅读专题下面的文章。

2025.06.26

3737

12

go语言版本升级
go语言版本升级

本专题整合了go语言版本升级方法,想了解更多相关内容,请阅读专题下面的文章。

2025.06.27

6770

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程