11.数组和动态数组(slice)区别

1.数组

示例代码

arr1.go

package chapter08

import "fmt"


// 数组和形参 都是值传递
func printArray(myArray [4]int) {
    // 值拷贝
    for index, value := range myArray {
        fmt.Println("index = ", index, ", value = ", value)
    }

    myArray[1] = 111
}

func Run() {
    // 固定长度的数组,数组的长度也是数组定义的一部分
    var myArray1 [10]int

    myArray2 := [10]int{1, 2, 3, 4} // 数组的前4个是有值,后6个是默认值
    myArray3 := [4]int{11, 22, 33, 44}

    // myArray1 初始化
    fmt.Println("myArray1=====")
    for i := 0; i < 10; i++ {
        fmt.Printf("%d ", myArray1[i])
        if i < 9 {
            fmt.Printf(",")
        }
    }
    fmt.Println("")

    fmt.Println("myArray2======")
    for i, v := range myArray2 {
        fmt.Println("index = ", i, ", value = ", v)
    }

    // 查看数组的数据类型
    fmt.Printf("myArray1 types = %T\n", myArray1)
    fmt.Printf("myArray2 types = %T\n", myArray2)
    fmt.Printf("myArray3 types = %T\n", myArray3)

    printArray(myArray3)
    fmt.Println("--------------")
    for index, value := range myArray3 {
        fmt.Println("index = ", index, ", value = ", value)
    }

}

arr1_test.go

package chapter08

import "testing"

func TestRUn(t *testing.T) {
    Run()
}

执行结果

=== RUN   TestRUn
myArray1=====
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
myArray2======
index =  0 , value =  1
index =  1 , value =  2
index =  2 , value =  3
index =  3 , value =  4
index =  4 , value =  0
index =  5 , value =  0
index =  6 , value =  0
index =  7 , value =  0
index =  8 , value =  0
index =  9 , value =  0
myArray1 types = [10]int
myArray2 types = [10]int
myArray3 types = [4]int
index =  0 , value =  11
index =  1 , value =  22
index =  2 , value =  33
index =  3 , value =  44
--------------
index =  0 , value =  11
index =  1 , value =  22
index =  2 , value =  33
index =  3 , value =  44
--- PASS: TestRUn (0.00s)
PASS
ok      

2.切片(动态数组)

示例代码

arr2.go

package chapter08

import "fmt"

func printArray2(myArray []int) {
    // 切片是引用传递
    // _ 表示匿名变量
    for _, value := range myArray {
        fmt.Println("value = ", value)
    }
    myArray[0] = 100
}

// main
func Run2() {
    myArray := []int{1, 2, 3, 4} // 动态数组,切片 slice
    fmt.Printf("myArray type is %T\n", myArray)
    printArray2(myArray)

    fmt.Println("===========")

    for _, value := range myArray {
        fmt.Println("value = ", value)
    }
}

arr2_test.go

package chapter08

import "testing"

func TestRUn2(t *testing.T) {
    Run2()
}

执行结果

=== RUN   TestRUn2
myArray type is []int
value =  1
value =  2
value =  3
value =  4
===========
value =  100
value =  2
value =  3
value =  4
--- PASS: TestRUn2 (0.00s)
PASS
ok  

3.总结

posted @ 2021-10-08 13:39  可可逗豆  阅读(62)  评论(0)    收藏  举报