What if your program could magically know how full your list is and when to grow it without you lifting a finger?
Why Slice length and capacity in Go? - Purpose & Use Cases
Imagine you have a long list of items, like a shopping list, and you want to keep track of how many items you have and how much space you have left to add more. Doing this by hand means counting each item every time and guessing how much room is left.
Manually counting items and managing space is slow and easy to mess up. You might forget to update counts or run out of space unexpectedly, causing errors or crashes in your program.
Using slice length and capacity in Go lets you automatically track how many items are in your list (length) and how much room you have to add more (capacity). This makes managing lists fast, safe, and efficient.
var arr [10]int count := 0 // Manually track count and check before adding
slice := make([]int, 0, 10) // Use len(slice) and cap(slice) to manage length and capacity
You can easily grow and manage dynamic lists without worrying about errors or manual bookkeeping.
Think of a music playlist app that adds songs dynamically. Slice length and capacity help the app know how many songs are in the playlist and when to allocate more space smoothly.
Manual counting and space management is error-prone and slow.
Slice length and capacity automatically track list size and space.
This makes dynamic list handling efficient and safe in Go.
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
