1. 数组
1.1 声明数组的方式
var myArray1 [10]int
myArray2 := [10]int{1,2,3,4}//前几位为1234,后几位为0
myArray3 := [4]int
1.2 数组的长度是固定的
1.3 固定长度的数组在传参的时候是严格匹配数组类型的
1.4 数组是值传递
可以查看下面array.go的代码
2. 动态数组slice
2.1 声明slice的方式
myArray := []int{1,2,3,4}//此时的数组为[4]int
2.2 动态数组(slice)是引用传递
2.3 动态数组在传参上是引用传递,而且不同元素长度的动态数组他们的形参是一致的。
array.go
package main
//不同长度的数组传参的问题比如[4]int 和 [10]int
func printArray(myArray [4]int){
//值拷贝
for index,value := range myArray {
fmt.Println("index = ",index,"value = ",value)
}
myArray[0] = 111//不会改变传进来的数组的值
}
func main() {
//固定长度的数组
var myArray1 [10]int
myArray2 := [10]int{1,2,3,4}//前几位为1234,后几位为0
myArray3 := [4]int
//for i :=0;i < 10; i++{
for i := 0; i < len(myArray1);i++{
fmt.Println(myArray1[i])
}
for index,value ;= range myArray2{
fmt.Println("index = ",index,"value = ",value)
}//range会根据不同的集合返回不同的值
//查看数组的数据类型
fmt.printf("myArray1 types = %T\n",myArray1)
fmt.printf("myArray2 types = %T\n",myArray2)
fmt.printf("myArray3 types = %T\n",myArray3)
printArray(myArray3)
}
slice.go
package main
import "fmt"
func printArray(myArray []int){
//引用传递
//_表示匿名的变量
for _ ,value := range myArray {
fmt.Println("value = ",value)
}
myArray[0]=100
}
func main(){
//动态数组,切片slice:指向内存的指针
myArray := []int{1,2,3,4}//此时的数组为[4]int
fmt.Printf("myArray type is %T\n",myArray)
printArray(myArray)
fmt.Println(" ===== ")
for _,value := range myArray {
fmt.Println("value = ",value)
}
}