机器学习的同学对python的array应该很了解,但是做web开发的同学对python的array使用的不多
Go 语言提供了数组类型的数据结构。 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。数组的下标取值范围是从0开始,到长度减1。
数组一旦定义后,大小不能更改。
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
相对于去声明 number0, number1, …, number99 的变量,使用数组形式 numbers[0], numbers[1] …, numbers[99] 更加方便且易于扩展。
数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。
7.2 go语言的数组 - 图1

声明和初始化数组

需要指明数组的大小和存储的数据类型。

  1. var balance [10] float32
  2. 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. balance[4] = 50.0

数组的其他创建方式:

  1. var a [4] float32 // 等价于:var arr2 = [4]float32{}
  2. fmt.Println(a) // [0 0 0 0]
  3. var b = [5] string{"ruby", "王二狗", "rose"}
  4. fmt.Println(b) // [ruby 王二狗 rose ]
  5. var c = [5] int{'A', 'B', 'C', 'D', 'E'} // byte
  6. fmt.Println(c) // [65 66 67 68 69]
  7. d := [...] int{1,2,3,4,5}// 根据元素的个数,设置数组的大小
  8. fmt.Println(d)//[1 2 3 4 5]
  9. e := [5] int{4: 100} // [0 0 0 0 100]
  10. fmt.Println(e)
  11. f := [...] int{0: 1, 4: 1, 9: 1} // [1 0 0 0 1 0 0 0 0 1]
  12. fmt.Println(f)

访问数组元素

package main

import "fmt"

func main() {
   var n [10]int /* n 是一个长度为 10 的数组 */
   var i,j int

   /* 为数组 n 初始化元素 */         
   for i = 0; i < 10; i++ {
      n[i] = i + 100 /* 设置元素为 i + 100 */
   }

   /* 输出每个数组元素的值 */
   for j = 0; j < 10; j++ {
      fmt.Printf("Element[%d] = %d\n", j, n[j] )
   }
}

数组的长度

通过将数组作为参数传递给len函数,可以获得数组的长度。

package main

import "fmt"

func main() {  
    a := [...]float64{67.7, 89.8, 21, 78}
    fmt.Println("length of a is",len(a))
}

您甚至可以忽略声明中数组的长度并将其替换为…让编译器为你找到长度。这是在下面的程序中完成的。

遍历数组:

使用range遍历数组:

如果您只需要值并希望忽略索引,那么可以通过使用_ blank标识符替换索引来实现这一点。

数组是值类型

数组是值类型 Go中的数组是值类型,而不是引用类型。这意味着当它们被分配给一个新变量时,将把原始数组的副本分配给新变量。如果对新变量进行了更改,则不会在原始数组中反映。

数组的大小是类型的一部分。因此[5]int和[25]int是不同的类型。因此,数组不能被调整大小。不要担心这个限制,因为切片的存在是为了解决这个问题。