Go 语言提供了数组类型的数据结构 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型 相对于去声明 number0, number1, …, number99 的变量,使用数组形式 numbers[0], numbers[1] …, numbers[99] 更加方便且易于扩展 数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推

Go语言 数组 - 图1

内容 描述
数组声明 Go的数组声明语法
访问数组 访问Go中的数组该
多维数组 Go 支持多维数组,最简单的多维数组是二维数组
向函数传递数组 你可以向函数传递数组参数

声明数组

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:

  1. var variable_name [SIZE] variable_type

以上为一维数组的定义方式。例如以下定义了数组 balance 长度为 10 类型为 float32:

  1. var balance [10] float32

赋值数组

  1. var balance [5] float32
  2. balance = [5]float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
  3. var balance[5] float32 =[5]float32 {1000.0, 2.0, 3.4, 7.0, 50.0};
  4. var balance = [5]float32 {1000.0, 2.0, 3.4, 7.0, 50.0};
  1. package main
  2. import "fmt"
  3. func main() {
  4. var balance [5] float32
  5. balance = [5]float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
  6. fmt.Println(balance[0])
  7. }

初始化数组

以下演示了数组初始化:

  1. var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

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

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

  1. var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  2. var balance = []float32{1000.0, 2.0, 3.4, 7.0, 50.0}

该实例与上面的实例是一样的,虽然没有设置数组的大小

  1. balance[4] = 50.0

以上实例读取了第五个元素。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
Go语言 数组 - 图2

访问数组元素

数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:

  1. var salary float32 = balance[9]

以上实例读取了数组balance第10个元素的值。
以下演示了数组完整操作(声明、赋值、访问)的实例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var demoArray [10]int // n是一个长度为10的数组
  5. var i,j int
  6. // 为数组 n 初始化元素
  7. // demoArray = [10]int {1,2,3,4,5,6,7,8,9,10}
  8. for i = 0; i < 10; i++ {
  9. demoArray[i] = i + 100 // 设置元素为 i + 100
  10. }
  11. // 输出每个数组元素的值
  12. for j = 0; j < 10; j++ {
  13. fmt.Printf("Element[%d] = %d\n", j, demoArray[j] )
  14. }
  15. }
  16. /*
  17. Element[0] = 100
  18. Element[1] = 101
  19. Element[2] = 102
  20. Element[3] = 103
  21. Element[4] = 104
  22. Element[5] = 105
  23. Element[6] = 106
  24. Element[7] = 107
  25. Element[8] = 108
  26. Element[9] = 109
  27. */

多维数组

Go 语言支持多维数组,以下为常用的多维数组声明方式

  1. var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

以下实例声明了三维的整型数组

  1. var threedim [5][10][4]int

二维数组

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

  1. var arrayName [x][y] variable_type

variable_type 为 Go 语言的数据类型,arrayName 为数组名,二维数组可认为是一个表格,x为行,y为列,下图演示了一个二维数组 a 为三行四列:
image.png
二维数组中的元素可通过 a[i][j] 来访问

初始化二维数组

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

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

访问二维数组

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

  1. var value int = a[2][3]
  2. val := a[2][3]
  3. //以上实例访问了二维数组 val 第三行的第四个元素
  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 数组 - 5 行 2 列*/
  5. var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
  6. /* 输出数组元素 */
  7. for i := 0; i < 5; i++ {
  8. for j := 0; j < 2; j++ {
  9. fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
  10. }
  11. }
  12. }
  13. /*
  14. 以上实例运行输出结果为:
  15. a[0][0] = 0
  16. a[0][1] = 0
  17. a[1][0] = 1
  18. a[1][1] = 2
  19. a[2][0] = 2
  20. a[2][1] = 4
  21. a[3][0] = 3
  22. a[3][1] = 6
  23. a[4][0] = 4
  24. a[4][1] = 8
  25. */

向函数传递数组

如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组,我们可以通过以下两种方式来声明

形参设定数组大小

  1. void myFunction(param [10]int){
  2. 函数体...
  3. }
  1. package main
  2. import "fmt"
  3. func main() {
  4. // 数组长度为 5
  5. var balance = [5]int {1000, 2, 3, 17, 50}
  6. var avg float32
  7. // 数组作为参数传递给函数
  8. avg = getAverage( balance, 5 ) ;
  9. // 输出返回的平均值
  10. fmt.Printf( "平均值为: %f ", avg );
  11. }
  12. func getAverage(arr [5]int, size int) float32 {
  13. var i,sum int
  14. var avg float32
  15. for i = 0; i < size;i++ {
  16. sum += arr[i]
  17. }
  18. avg = float32(sum) / float32(size)
  19. return avg;
  20. }
  21. /*
  22. 以上实例执行输出结果为:
  23. 平均值为: 214.399994
  24. */

形参未设定数组大小

  1. void myFunction(param []int){
  2. 函数体...
  3. }

实例中函数接收整型数组参数,另一个参数指定了数组元素的个数,并返回平均值

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 数组长度为 5
  5. var balance = []int {1000, 2, 3, 17, 50}
  6. var avg float32
  7. // 数组作为参数传递给函数
  8. avg = getAverage( balance, 5 ) ;
  9. // 输出返回的平均值
  10. fmt.Printf( "平均值为: %f ", avg );
  11. }
  12. func getAverage(arr []int, size int) float32 {
  13. var i,sum int
  14. var avg float32
  15. for i = 0; i < size;i++ {
  16. sum += arr[i]
  17. }
  18. avg = float32(sum) / float32(size)
  19. return avg;
  20. }
  21. /*
  22. 以上实例执行输出结果为:
  23. 平均值为: 214.399994
  24. */

精度处理

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. a1 := 1.69
  7. b1 := 1.7
  8. c1 := a1 * b1 // 结果应该是2.873
  9. fmt.Println(c1) // 输出的是2.8729999999999998
  10. fmt.Println(float64(c1)) // 显示
  11. a2 := 1.69 * 100 // 表示1.69
  12. b2 := 1.70 * 100 // 表示1.70
  13. c2 := a2 * b2 // 结果应该是2873000表示2.873
  14. fmt.Println(c2) // 内部编码
  15. fmt.Println(float64(c2) / 10000) // 显示
  16. }