Go语言数组的定义

数组(Array)是具有相同类型的一组已编号且长度固定的数据项序列。数据存储的类型可以是任意的原始类型,例如整形、字符串或者自定义类型。

由于内存连续分配存储空间给数组,所以CPU能把正在使用的数据缓存更久的时间,并且因为内存连续所以索引很容易计算,可以快速迭代数组中所有的元素。

Go语言数组的声明和初始化

声明数组:

Go 语言数组声明需要指定存储元素的类型及元素个数,一旦声明之后元素类型和数组长度不能更改。 语法格式如下:

var variable_name [SIZE] variable_type
复制代码

例如:

var balance [10] float32    // 一维数组 balance 长度为 10 类型为 float32
复制代码

初始化数组:

初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
复制代码

如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
复制代码

Go语言数组的使用

数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。

读取或修改数组格式为数组名后加中括号,中括号中为索引的值。



读取数组: > ``` > var salary float32 = balance[9] // 读取数组balance第10个元素的值 > ```



修改数组:

balance[4] = 50.0
复制代码
遍历数组:


// range
for k, v := range balance {
    fmt.Println(k, v)
}

// for 循环
var i int
for i = 0; i < 10; i++ {
    fmt.Println(i, balance[i])
}
复制代码



向函数传递数组:

要向函数传递数组参数,首先需要在函数定义时声明形参为数组,可以通过以下两种方式来声明:

方式一

形参设定数组大小:

void myFunction(param [10]int)
{
  ...
}
复制代码

方式二

形参未设定数组大小:

void myFunction(param []int)
{
  ...
}
复制代码

实例:

package main

import "fmt"

func main() {
   /* 数组长度为 5 */
   var  balance = []int {1000, 2, 3, 17, 50}
   var avg float32

   /* 数组作为参数传递给函数 */
   avg = getAverage( balance, 5 ) ;

   /* 输出返回的平均值 */
   fmt.Printf( "平均值为: %f ", avg );  // 平均值为: 214.399994
}
func getAverage(arr []int, size int) float32 {
   var i,sum int
   var avg float32  

   for i = 0; i < size;i++ {
      sum += arr[i]
   }

   avg = float32(sum) / float32(size)

   return avg;
}
复制代码

注意:被函数引用的形参数组是函数的一个副本,在函数内部改变形参数组,不会影响原来的数组,如果要改变就用指针数组。

Go 语言多维数组

多维数组的声明:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
复制代码

二维数组

二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:

var arrayName [ x ][ y ] variable_type      // variable_type是数据类型, arrayName是数组名
复制代码

二维数组可认为是一个表格,x 为行,y 为列,下图演示了一个二维数组 a 为三行四列:



初始化二维数组

多维数组可通过大括号来初始值。以下实例为一个 3 行 4 列的二维数组:

a = [3][4]int{  
    {0, 1, 2, 3} ,      /* 第一行索引为 0 */
    {4, 5, 6, 7} ,      /* 第二行索引为 1 */
    {8, 9, 10, 11},     /* 第三行索引为 2 */
}
// 注意:以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:\

a = [3][4]int{  
    {0, 1, 2, 3} ,      /* 第一行索引为 0 */
    {4, 5, 6, 7} ,      /* 第二行索引为 1 */
    {8, 9, 10, 11}}     /* 第三行索引为 2 */

复制代码

访问二维数组 通过指定坐标(行索引与列索引)来访问二维数组,例如:

val := a[2][3]  // 二维数组 val 第三行的第四个元素
// 或
var value int = a[2][3]
复制代码

可以使用循环嵌套来输出二维数组的元素:

package main

import "fmt"

func main() {
    // 数组 - 5 行 2 列
    var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
    var i ,j int

    // 输出数组元素
    for  i = 0; i < 5; i++ {
        for j = 0; j < 2; j++ {
            fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
        }
    }
}

// 以上实例运行输出结果为:
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8
复制代码