golang append及slice(len、cap)注意点

https://ask.csdn.net/questions/1057589#answer_form

golang append及slice(len、cap)注意点_第1张图片

1、关于切片

切片拥有长度容量

切片的长度是它所包含的元素个数

切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数

切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。

来自

package main

import (

    "fmt"

)

func main() {

    var baseArr = []int{1,2,3,4,5}

    var part1 = baseArr[:1]              // (1)

    fmt.Print(len(part1),cap(part1))

    fmt.Print(part1,"\n")

    var part2 = baseArr[1:3]

    fmt.Print(part2,"\n")

    fmt.Print(len(part2),cap(part2))

    var result [][]int

    for  i := 0; i < len(part2); i++ {

        tempArr := append(part1, part2[i]) // (2)

        result = append(result, tempArr)   // (3)

    }
    fmt.Println(result)
}

https://www.cnblogs.com/AndrewGhost/p/12183318.html

2、关于append,

对切片append元素有两种情况考量,

如 append(slice, 1)

1)如果slice的容量还有剩余,元素1直接追加到slice指向的底层数组。

2) 如果slice没有剩余容量,append函数会创建一个新的切片,新切片容量为slice的两倍,并将slice中的数据拷贝到新切片,然后追加新元素。

来自

 

golang append及slice(len、cap)注意点_第2张图片

有容量还是在append原来的切片修改

golang append及slice(len、cap)注意点_第3张图片

 

 

 

 

你可能感兴趣的:(go)