【Go】切片


  1. 声明变量-》分配空间-》赋值

    1
    2
    3
    4
    5
    6
    7
    // 1. 声明切片,但不赋值
    var slice1 []int // 声明切片
    slice1 = make([]int, 3) // 开辟空间
    slice1[0] = 1 // 赋值
    slice1[1] = 2
    slice1[2] = 3
    fmt.Println(slice1)
  2. 声明变量并分配空间-》赋值

    1
    2
    3
    4
    5
    6
    // 2. 声明切片并分配空间
    slice2 := make([]int, 3) // 声明并分配空间
    slice2[0] = 1 // 赋值
    slice2[1] = 2
    slice2[2] = 3
    fmt.Println(slice2)
  3. 截取

    1
    2
    3
    4
    5
    6
    // 3.截取 [startIndex:endIndex) 左闭右开
    slice3 := slice2[0:2]
    fmt.Println(slice3)
    // slice3指向slice2所在内存空间的起始地址处
    slice3[0] = 100
    fmt.Println("slice2 :", slice2)

    测试结果

  4. 复制 (若没有分配内存空间,则无法进行有效复制)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 4.复制 需要分配内存空间才能有效复制
    var slice4 []int
    fmt.Println("----未分配内存空间的复制----")
    copy(slice4, slice2)
    fmt.Println("slice4 :", slice4)
    fmt.Println("----分配完内存空间的复制----")
    slice4 = make([]int, len(slice2))
    copy(slice4, slice2)
    fmt.Println("slice4 :", slice4)

    测试结果