数组Array
数组在go中用的不是很多,比较常用的还是切片
声明一个数组
package main
import "fmt"
func main() {
var a1 [3]bool
var a2 [4]bool
fmt.Printf("a1:%T,a2:%T", a1, a2)
}
注意在go中数组长度是数组类型的一部分,只有同样长度的数组才能进行比较,而且长度一旦定义就不能更改。
数组的定义
var 数组名 [数组长度] 数组类型
数组的初始化
数组不初始化,默认值是零值
例如字符串就是空值,布尔值就是false,整形和浮点都是0
package main
import "fmt"
func main() {
var a1 [3]bool
var a2 [4]bool
_ = a2
//初始化方式1
a1 = [3]bool{true, true, true}
fmt.Println(a1)
//初始化2
//根据初始值自动推断数组的长度是多少
a10 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
fmt.Println(a10)
fmt.Printf("a10: %T \n", a10) //这里可以看到a10的类型是[10]int
//初始化3,指定索引的方式来初始化
a5 := [5]int{0: 1, 4: 5}
fmt.Println(a5)
}
数组的遍历
package main
import (
"fmt"
)
func main() {
a1 := [...]string{"上海", "天津", "北京"}
//索引遍历
for i := 0; i < len(a1); i++ {
fmt.Println(a1[i])
}
//for range遍历
for i, v := range a1 {
fmt.Println(i, v)
}
}
多维数组
可以理解为嵌套数组
例如声明这样的数组:[[1,2] [3,4] [5,6]]
注意go数组内只能放同一个类型的数组
package main
import "fmt"
func main() {
var a [3][2]int //[3]的值是[2]int
a = [3][2]int{ //注意外层[3][2]int一定要写对
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
fmt.Println(a)
}
多维数组的遍历
package main
import "fmt"
func main() {
var a [3][2]int
a = [3][2]int{
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
fmt.Println(a)
for _, v1 := range a {
fmt.Println(v1) //这个只遍历了[3]数组内的[2]数组
for _, v2 := range v1 {
fmt.Println(v2) //这个则遍历了[3]数组中的[2]数组中的所有元素
}
}
}
数组的类型
数组的类型是值类型
b1 := [3]int{1, 2, 3}
b2 := b1 //这一步只是进行了拷贝和复制
b2[0] = 100 //这里赋值并不会更改b1的值
fmt.Println(b1, b2)
数组是支持"=="和"! ="操作符,因为内存总是被初始化过的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构