cap vs len of slice in golang

前端 未结 3 1462
感动是毒
感动是毒 2021-01-31 15:35

What is the difference between cap and len of a slice in golang?

According to definition:

A slice has both a length and a capacity.

The length of a slice

3条回答
  •  走了就别回头了
    2021-01-31 16:08

    A slice is an abstraction that uses an array under the covers.

    cap tells you the capacity of the underlying array. len tells you how many items are in the array.

    The slice abstraction in Go is very nice since it will resize the underlying array for you, plus in Go arrays cannot be resized so slices are almost always used instead.

    Example:

    s := make([]int, 0, 3)
    for i := 0; i < 5; i++ {
        s = append(s, i)
        fmt.Printf("cap %v, len %v, %p\n", cap(s), len(s), s)
    }
    

    Will output something like this:

    cap 3, len 1, 0x1040e130
    cap 3, len 2, 0x1040e130
    cap 3, len 3, 0x1040e130
    cap 6, len 4, 0x10432220
    cap 6, len 5, 0x10432220
    

    As you can see once the capacity is met, append will return a new slice with a larger capacity. On the 4th iteration you will notice a larger capacity and a new pointer address.

    Play example

    I realize you did not ask about arrays and append but they are pretty foundational in understanding the slice and the reason for the builtins.

提交回复
热议问题