第11节 Go中的数组

240 阅读2分钟

1. 数组的定义

数组就是用来存放多个同一数据类型的变量,即数组也是一种数据类型,在 golang 中数组是值类型。这点和 Java 不同,在 Java 中数组是引用类型

1.1 数组声明语法

var 数组名称  [数组大小]数据类型
比如:var array [5]float64

1.2 数组初体验

  • 求 1~4 的和以及平均值
package main

import (
	"fmt"
)
func main() {
	var a [4]float64

	a[0] = 1.0
	a[1] = 2.0
	a[2] = 3.0
	a[3] = 4.0

	total := 0.0
	for _,v := range a {
            total += v
	}

	avg := total / float64(len(a))
        // total=10,avg=2.5
	fmt.Printf("total=%v,avg=%v\n",total,avg)
}

2. 数组的初始化

回忆Java中的数组声明方式:

int[] a = new int[]{2, 3, 4};

int[] a2 = new int[3];

2.1 方式一

package main

import "fmt"

func main() {
	var array1 [3]int = [3]int {1, 2, 3}
	fmt.Printf("array1=%v\n",array1)
}

2.2 方式二

package main

import "fmt"

func main() {
	var array2 = [3]int {4, 5, 6}
	fmt.Printf("array1=%v\n",array2)
}

2.3 方式三

package main

import "fmt"

func main() {
	var array3 = [...]int {7, 8, 9}
	fmt.Printf("array1=%v\n",array3)
}

3. 数组使用细节

  • 数组一旦声明和定义之后,其长度是固定的,不能动态变化
  • 数组声明后,如果没有赋值,是有默认值的
package main

import "fmt"

func main() {
	var a1 [3]int 
	var a2 [3]float64
	var a3 [3]bool
	var a4 [3]string
	// a1=[0 0 0],a2=[0 0 0],a3=[false false false],a4=[  ]
        // 数值类型数组默认值 0 ;字符串数组默认值:"";布尔数组默认值:false
	fmt.Printf("a1=%v,a2=%v,a3=%v,a4=%v\n",a1, a2, a3, a4)
}
  • 数组属于值类型,如果进行值传递,会进行值拷贝,因此不会影响到原来的数组
package main

import "fmt"

func main() {
	var arr = [3]int{1, 2, 3}
	// arr=[5 2 3]
	test(arr)
	// arr=[1 2 3]
	fmt.Printf("arr=%v\n",arr)
}

func test(arr [3]int) {
	arr[0] = 5
	fmt.Printf("arr=%v\n",arr)
}

可以看到 main 方法中的数组传递 test 方法后,它的值并没有变化。这和 Java是完全不一样的!!!在 golang中如果要改变,通过指针方式传递

package main

import "fmt"

func main() {
	var arr = [3]int{1, 2, 3}
	// arr=&[1 2 5]
	test(&arr)
	// arr=[1 2 5]
	fmt.Printf("arr=%v\n",arr)
}

func test(arr *[3]int) {
	(*arr)[2] = 5
	fmt.Printf("arr=%v\n",arr)
}