Array(数组)

数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:

1
2
3
4
//定义一个长度为3的,类型为int的数组a
//不进行初始化默认零值(string:"", int : 0, boo : false)
var a [3]int
fmt.Println(a) //[0 0 0]

数组定义

1
var 数组变量名 [数组长度]T

数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变化。

1
2
3
var b [3]bool
fmt.Printf("类型:%T", b)
==> 类型:[3]bool

数组初始化

  • 方法一

    1
    2
    3
    4
    //方式一数组初始化
    var numArray [3]int
    numArray = [3]int{1,2}
    fmt.Println(numArray)
  • 方式二

    1
    2
    3
    //方式二,根据初始值自动推算数组长度
    arr := [...]int{1,2,3,4,5,6,7,8,9,0}
    fmt.Println(arr)
  • 方式三

    1
    2
    3
    //方式三,根据索引初始化值
    a3 := [4]bool{1:true,3:true}
    fmt.Println(a3)
  • 多维数组定义及初始化

    注意:** 多维数组只有第一层可以使用...来让编译器推导数组长度。例如:

    1
    2
    3
    4
    5
    6
    7
    //多维数组定义
    citys := [...][2]string{
    {"北京", "上海"},
    {"广州", "深圳"},
    {"成都", "重庆"},
    }
    fmt.Println(citys)

数组遍历

  • 普通for循环遍历

    1
    2
    3
    4
    5
    6
    7
    //普通for循环数组遍历
    for i :=0; i < len(citys); i++ {
    city := citys[i]
    for j := 0; j < len(city); j++ {
    fmt.Println(city[j])
    }
    }
  • for -range遍历

    1
    2
    3
    4
    5
    6
    //for range遍历
    for _, city := range citys{
    for _, c := range city{
    fmt.Println(c)
    }
    }

数组是值类型

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

1
2
3
4
5
6
7
8
9
c := [...]string{"吃饭", "睡觉", "打豆豆"}
fmt.Println(c)
d := c
d[2] = "上班"
fmt.Println(d)

===>>
[吃饭 睡觉 打豆豆]
[吃饭 睡觉 上班]

注意

1、数组支持”==”,”!=”操作符,因为内存总是被初始化过的。

2、[n]*T表示指针数组,*[n]T表示数组指针