Slices in Go let you work with parts of arrays easily. Knowing their length and capacity helps you manage how much data they hold and how much space they can grow into.
Slice length and capacity in Go
len(slice) // returns the number of elements in the slice cap(slice) // returns the capacity of the slice (size of underlying array from start of slice)
len(slice) gives how many elements are currently in the slice.
cap(slice) shows how many elements the slice can hold before needing a new array.
s := []int{1, 2, 3, 4, 5} fmt.Println(len(s)) // 5 fmt.Println(cap(s)) // 5
s2 has length 2 (elements 2 and 3) but capacity 4 because it can grow up to the end of the original array.s := []int{1, 2, 3, 4, 5} s2 := s[1:3] fmt.Println(len(s2)) // 2 fmt.Println(cap(s2)) // 4
s := make([]int, 3, 10) fmt.Println(len(s)) // 3 fmt.Println(cap(s)) // 10
This program shows the length and capacity of an original slice, a slice made from it, and a new slice created with make. It helps see how length and capacity change.
package main import "fmt" func main() { s := []int{10, 20, 30, 40, 50} fmt.Printf("Original slice: %v\n", s) fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s)) s2 := s[1:4] fmt.Printf("Sliced slice: %v\n", s2) fmt.Printf("Length: %d, Capacity: %d\n", len(s2), cap(s2)) s3 := make([]int, 2, 5) fmt.Printf("New slice with make: %v\n", s3) fmt.Printf("Length: %d, Capacity: %d\n", len(s3), cap(s3)) }
Length is how many elements you can use right now.
Capacity is how many elements you can add before Go needs to create a new bigger array.
Slicing a slice can reduce length but capacity depends on how much space is left in the original array.
Length tells how many items are in the slice.
Capacity tells how many items the slice can hold before growing.
Understanding length and capacity helps you write efficient Go programs.
Practice
len() function return when used on a slice?Solution
Step 1: Understand the purpose of
Thelen()on sliceslen()function returns how many elements are currently stored in the slice.Step 2: Differentiate from capacity
Capacity is about how many elements the slice can hold before resizing, not the current count.Final Answer:
The number of elements currently in the slice -> Option DQuick Check:
len(slice) = current element count [OK]
- Confusing length with capacity
- Thinking len returns memory size
- Assuming len gives last index
Solution
Step 1: Recall the
makefunction signature for slicesmake([]T, length, capacity)creates a slice with given length and capacity.Step 2: Match length and capacity values
To get length 3 and capacity 5, usemake([]int, 3, 5).Final Answer:
make([]int, 3, 5) -> Option BQuick Check:
make([]int, length, capacity) [OK]
- Swapping length and capacity arguments
- Using slice literal instead of make
- Omitting capacity when needed
nums := make([]int, 2, 4) nums[0] = 10 nums[1] = 20 fmt.Println(len(nums), cap(nums))
Solution
Step 1: Analyze slice creation
make([]int, 2, 4)creates a slice with length 2 and capacity 4.Step 2: Check length and capacity after assignments
Assigning values to existing indices does not change length or capacity.Final Answer:
2 4 -> Option CQuick Check:
len = 2, cap = 4 [OK]
- Confusing length with capacity
- Assuming capacity equals length after assignment
- Thinking length changes when assigning values
arr := []int{1, 2, 3, 4, 5}
slice := arr[1:3]
fmt.Println(len(slice), cap(slice))What is the correct output?
Solution
Step 1: Determine length of the slice
The slice is from index 1 to 3 (exclusive), so length = 3 - 1 = 2.Step 2: Calculate capacity of the slice
Capacity is from start index to end of original array: 5 - 1 = 4.Final Answer:
2 4 -> Option AQuick Check:
len = 2, cap = 4 from slice indices [OK]
- Using slice length as capacity
- Confusing slice end index with capacity
- Assuming capacity equals original array length
s := make([]int, 3, 5). You append two elements to it. What will be the length and capacity of s after these appends?Solution
Step 1: Understand initial slice size
Slicesstarts with length 3 and capacity 5.Step 2: Append two elements within capacity
Appending two elements increases length to 5, capacity remains 5 because it is not exceeded.Final Answer:
Length 5, Capacity 5 -> Option AQuick Check:
Appending within capacity keeps capacity same [OK]
- Assuming capacity doubles immediately after append
- Confusing length with capacity after append
- Thinking capacity increases by 1 per append
Ready to prove it?
Pass the test and this pattern moves unknown
