Go语言数组的定义与使用
1、使用var关键字申明,指定数组的长度
package main
import "fmt"
func main() {
var a [5]int
fmt.Println(a) //默认是零值[0 0 0 0 0]
var b [5]string
fmt.Println(b) //默认是零值[]
var c [5]bool
fmt.Println(c) //默认是零值[false false false false false]
var d [5]float32
fmt.Println(d) //默认是零值[0 0 0 0 0]
}
2、使用冒号直接赋值
package main
import "fmt"
func main() {
a := [5]int{1, 2, 3, 4, 5}
fmt.Println(a)
}
3、让编译器自己推导出数组大小
package main
import "fmt"
func main() {
b := [...]int{1, 2, 3} //添加...让编译器自动决定数组大小
fmt.Println(b)
c := []int{1, 2, 3} //如果不添加...则表示切片,而不是数组了
fmt.Println(c)
}
4、二维数组
package main
import "fmt"
func main() {
var a [4][5]int //4行5列的数组
fmt.Println(a) //[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
}
5、数组的遍历
package main
import "fmt"
func main() {
a := [5]int{2, 4, 6, 8, 10}
for i := 0; i < len(a); i++ { //使用下标的方式遍历
fmt.Println(a[i])
}
for i := range a { //使用range的方式遍历 一个值表示下标
fmt.Println(a[i])
}
for i, v := range a { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v)
}
for _, v := range a { //使用range的方式遍历 不要下标
fmt.Println(v)
}
}
6、数组是值类型,意味着数组传递给函数是拷贝
先看一下函数传递的方式
package main
import "fmt"
func show(arr [5]int) {
for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v)
}
}
func main() {
show([5]int{1, 4, 7, 2, 5})
show([5]int{1, 4, 7}) //不够的默认是零值0
show([...]int{1, 4, 7, 6, 47}) //使用...必须数组大小为5
}
再看一下值传递
package main
import "fmt"
func show(arr [5]int) {
for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v) //函数内传入的原始arr
}
arr[1] = 10
arr[2] = 100
arr[3] = 1000
arr[4] = 10000
for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v) //函数内arr已经改变了
}
}
func main() {
a := [5]int{1, 2, 3, 4, 5}
show(a)
//再看一下原始的a变没变:没变:值传递
for i, v := range a { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v)
}
}
7、指针传递数组
package main
import "fmt"
func show(arr *[5]int) {
for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v) //函数内传入的原始arr
}
arr[1] = 10
arr[2] = 100
arr[3] = 1000
arr[4] = 10000
for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v) //函数内arr已经改变了
}
}
func main() {
a := [5]int{1, 2, 3, 4, 5}
show(&a)
//再看一下原始的a变没变:变了:因为是指针传递
for i, v := range a { //使用range的方式遍历 两个值表示下标和值
fmt.Println(i, v)
}
}
8、写在最后
go一般不直接使用数组,而是使用切片
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示