Go - 数组
概述
数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成,一旦声明了,数组的长度就固定了,不能动态变化。
len()
和 cap()
返回结果始终一样。
声明数组
package main
import (
"fmt"
)
func main() {
//一维数组
var arr_1 [5] int
fmt.Println(arr_1)
var arr_2 = [5] int {1, 2, 3, 4, 5}
fmt.Println(arr_2)
arr_3 := [5] int {1, 2, 3, 4, 5}
fmt.Println(arr_3)
arr_4 := [...] int {1, 2, 3, 4, 5, 6}
fmt.Println(arr_4)
arr_5 := [5] int {0:3, 1:5, 4:6}
fmt.Println(arr_5)
//二维数组
var arr_6 = [3][5] int {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}, {3, 4, 5, 6, 7}}
fmt.Println(arr_6)
arr_7 := [3][5] int {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}, {3, 4, 5, 6, 7}}
fmt.Println(arr_7)
arr_8 := [...][5] int {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}, {0:3, 1:5, 4:6}}
fmt.Println(arr_8)
}
运行结果:
注意事项
一、数组不可动态变化问题,一旦声明了,其长度就是固定的。
var arr_1 = [5] int {1, 2, 3, 4, 5}
arr_1[5] = 6
fmt.Println(arr_1)
运行会报错:invalid array index 5 (out of bounds for 5-element array)
二、数组是值类型问题,在函数中传递的时候是传递的值,如果传递数组很大,这对内存是很大开销。
//demo_5.go
package main
import (
"fmt"
)
func main() {
var arr = [5] int {1, 2, 3, 4, 5}
modifyArr(arr)
fmt.Println(arr)
}
func modifyArr(a [5] int) {
a[1] = 20
}
运行结果:
//demo_6.go
package main
import (
"fmt"
)
func main() {
var arr = [5] int {1, 2, 3, 4, 5}
modifyArr(&arr)
fmt.Println(arr)
}
func modifyArr(a *[5] int) {
a[1] = 20
}
运行结果:
三、数组赋值问题,同样类型的数组(长度一样且每个元素类型也一样)才可以相互赋值,反之不可以。
var arr = [5] int {1, 2, 3, 4, 5}
var arr_1 [5] int = arr
var arr_2 [6] int = arr
运行会报错:cannot use arr (type [5]int) as type [6]int in assignment
推荐阅读
本文欢迎转发,转发请注明作者和出处,谢谢!
作者:新亮笔记(关注公众号,可申请添加微信好友)
出处:https://www.cnblogs.com/xinliangcoder
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 复杂业务系统线上问题排查过程
· 通过抓包,深入揭秘MCP协议底层通信
· 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历
· 糊涂啊!这个需求居然没想到用时间轮来解决
· 浅谈为什么我讨厌分布式事务
· 为大模型 MCP Code Interpreter 而生:C# Runner 开源发布
· 面试时该如何做好自我介绍呢?附带介绍样板示例!!!
· 复杂业务系统线上问题排查过程
· 独立开发:高效集成大模型,看这篇就够了
· 本可避免的P1事故:Nginx变更导致网关请求均响应400