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)
}