Go四神兽之数组
Posted ethan99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go四神兽之数组相关的知识,希望对你有一定的参考价值。
Array 数组
在 Go 语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可更改
基本语法
// 定义一个长度为3 元素类型为int的数组 list
var list [3]int
数组定义
var 数组变量名 [元素数量]T
数组可以通过下标进行访问,下标是从
0
开始,最后一个元素下标是len - 1
,访问越界(下标在合法范围之内),则触发访问越界, 会panic
数组的初始化
方法一
初始化数组可以使用初始化列表来设置数组元素的值
func main() var testArray [3]int // 数组会初始化为int类型的零值 var numArray = [3]int1, 2 // 使用指定的初始值完成初始化 var cityArray = [3]string"北京","上海","深圳" // 使用指定的值完成初始化 fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2 0] fmt.Println(cityArray) //[北京 上海 深圳]
方法二
按照上面的方法每次都要确保提供的初始值和数组长度一致,一般情况下我们可以让编译器根据初始值的个数自行推断数组的长度
func main() var testArray [3]int var numArray = [...]int1, 2 var cityArray = [...]string"北京","上海","深圳" fmt.Println(testArray) //[0 0 0] fmt.Println(numArray) //[1 2] fmt.Printf("type of numArray:%T\n", numArray) //type of numArray:[2]int fmt.Println(cityArray) //[北京 上海 深圳] fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
方法三
使用索引值的方式来初始化数组
func main() testArray = [...]int1: 1, 3: 5 fmt.Println(a) // [0 1 0 5] fmt.Printf("type of a:%T\n", a) //type of a:[4]int
数组的遍历
方法一
func main() var cityArray = [...]string"北京", "上海", "深圳" for i := 0; i < len(cityArray); i++ fmt.Println(cityArray[i])
方法二
func main() var cityArray = [...]string"北京", "上海", "深圳" for index, value := range a fmt.Println(index, value)
多维数组
Go 是支持多维数组的
二维数组的定义
func main()
a := [3][2]string
"北京", "上海",
"广州", "深圳",
"成都", "重庆",
fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
fmt.Println(a[2][1]) //支持索引取值:重庆
二维数组的遍历
func main()
cityArray := [3][2]string
"北京", "上海",
"广州", "深圳",
"成都", "重庆",
for _, v1 : := range cityArray
for _, v2 := range v1
fmt.Printf("%s\t", v2)
fmt.Println()
>>> 多维数组只有第一层可以使用 ...
来让编译器推导数组长度
//支持的写法
a := [...][2]string
"北京", "上海",
"广州", "深圳",
"成都", "重庆",
//不支持多维数组的内层使用...
b := [3][...]string
"北京", "上海",
"广州", "深圳",
"成都", "重庆",
数组是值类型
数组是值类型,赋值和传参会复制整个数组,因此改变副本的值不会改变本身的值
func modifyArray(x [3]int) x[0] = 100 func modifyArray2(x [3][2]int) x[2][0] = 100 func main() testArray := [3]int10, 20, 30 modifyArray(testArray) // 在modify中修改的是testArray的副本x fmt.Println(testArray) test2Array := [3][2]int 1, 1, 1, 1, 1, 1. moidifyArray2(test2Array) // 在modify2中修改的是test2Array的副本x fmt.Println(test2Array)
>>> 注意
- 数组支持
==
、!=
操作符,因为内存总是被初始化过的[n]*T
表示指针数组,*[n]T
表示数组指针
以上是关于Go四神兽之数组的主要内容,如果未能解决你的问题,请参考以下文章
[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段