主要区别:

    长度:数组的长度是固定的,一旦声明就不能改变;而切片的长度是动态的,可以在运行时改变大小。
    类型声明:数组在声明时需要指定长度,而切片不需要。
    内存分配:数组在栈上分配内存,而切片在堆上分配内存。
    示例:

    1. import "fmt"
    2. func main() {
    3. // 声明一个长度为5的整型数组
    4. var arr [5]int
    5. fmt.Println("Array:", arr)
    6. // 声明一个整型切片,初始为空
    7. var slice []int
    8. fmt.Println("Slice:", slice)
    9. // 使用make函数创建一个长度为5的切片
    10. slice = make([]int, 5)
    11. fmt.Println("Slice after make:", slice)
    12. // 为数组和切片赋值
    13. for i := 0; i < 5; i++ {
    14. arr[i] = i
    15. slice[i] = i
    16. }
    17. fmt.Println("Array with values:", arr)
    18. fmt.Println("Slice with values:", slice)
    19. // 尝试扩展切片
    20. slice = append(slice, 5)
    21. fmt.Println("Slice after appending:", slice)
    22. // 尝试扩展数组(会报错,因为数组长度固定)
    23. // arr = append(arr, 5) // 编译错误:first argument to append must be slice; have [5]int
    24. }

    输出:

    Array: [0 0 0 0 0]
    Slice: []
    Slice after make: [0 0 0 0 0]
    Array with values: [0 1 2 3 4]
    Slice with values: [0 1 2 3 4]
    Slice after appending: [0 1 2 3 4 5]