Golang | 数组的定义和使用

数组

同一种类型的集合称之为数组,数组是一组已编号且长度固定的数据项序列,数组中可以是任意的相同类型,数组的长度必须是一个常量或常量表达式,数组的索引是从0开始,到len(Array) - 1 的长度,数组的长度必须在声明时就固定下来。在Go语言中,类型控制的是非常严格的,比如:[2]int 和 [3]int 就是两种不同的类型。

使用

  func main() {
    // 先声明,然后再赋值
    a := [2]int{}
    a[0] = 1
    a[1] = 2
    // 声明的时候初始化
    b := [2]int{3, 4}
    // 以元素的个数初始化
    c := [...]int{5, 6, 7, 8}
    // 以下标初始化
    d := [4]int{1: 9, 3: 10}
    // 以 new 初始化, 返回数组的指针
    e := new([5]int)

    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
    fmt.Println(e)
    // 输出
    // [1 2]
    // [3 4]
    // [5 6 7 8]
    // [0 9 0 10]
    // &[0 0 0 0 0]
  }

二维数组

  func main() {
     arr := [2][3]int{{12,13,14},{15,16,17}}

     fmt.Println(arr)
     // 输出:
     // [[12 13 14] [15 16 17]]
  }

数组在函数间的传递

能通过第一次的打印看出来,初始化出来的数组都是值类型的,那么数组在函数间的传递也是值类型的吗?

  func arrPrint(arr [4]int)  {
    arr[2] = 100
    fmt.Println("arrPrint:",arr)
  }

  func main() {
    arr := [4]int{1,2,3,4}
    arrPrint(arr)
    fmt.Println("main:",arr)
    // 输出:
    // arrPrint: [1 2 100 4]
    // main: [1 2 3 4]
  }

能过上面的例子,可以发现,上现函数中修改了数组中的值,但是 main 函数中的打印并没有改变,所以可以确定,数组在函数间传递的时候就是值传递。

这样又会造成一个问题,因为值传递是数组间的复制,如果一个数组小的时候,对性能影响不会很大,但是当一个数组非常大的时候,对程序的性能就会造成很大的影响了,所以为了解决这个问题,在使用数组进行传值的时候一般都会使用地址传递,在函数中使用指针类型的数组进行接收。

在实际开发的时候,因为数组的扩展性不好,所以一般不使用数组,基本上使用的都是切片

数组因为是值类型,所以,在类型完全相同的情况下支持使用 == !=比较



关注公众号,随时获取最新资讯

细节决定成败!
个人愚见,如有不对,恳请斧正!

posted @ 2022-01-25 15:09  一点浩然气~  阅读(1367)  评论(0编辑  收藏  举报