Bird
Raised Fist0
DSA Goprogramming

Array Traversal Patterns in DSA Go

Choose your learning style10 modes available
Mental Model
Go through each item in an array one by one to look at or change it.
Analogy: Like walking down a row of mailboxes and checking each mailbox in order.
[0] -> [1] -> [2] -> [3] -> [4] -> null
 ↑
 current position at start
Dry Run Walkthrough
Input: array: [5, 10, 15, 20, 25], traverse to print each element
Goal: Print all elements in the array from start to end
Step 1: Start at index 0, print element 5
[5] -> [10] -> [15] -> [20] -> [25]
 ↑
 current at index 0
Why: We begin traversal from the first element
Step 2: Move to index 1, print element 10
[5] -> [10] -> [15] -> [20] -> [25]
      ↑
 current at index 1
Why: Move forward to next element to continue traversal
Step 3: Move to index 2, print element 15
[5] -> [10] -> [15] -> [20] -> [25]
           ↑
 current at index 2
Why: Keep moving forward to cover all elements
Step 4: Move to index 3, print element 20
[5] -> [10] -> [15] -> [20] -> [25]
                ↑
 current at index 3
Why: Continue until last element
Step 5: Move to index 4, print element 25
[5] -> [10] -> [15] -> [20] -> [25]
                     ↑
 current at index 4
Why: Print last element to complete traversal
Result:
Final printed output: 5 10 15 20 25
Array state unchanged: [5] -> [10] -> [15] -> [20] -> [25]
Annotated Code
DSA Go
package main

import "fmt"

func traverseArray(arr []int) {
    for i := 0; i < len(arr); i++ {
        fmt.Print(arr[i], " ") // print current element
    }
    fmt.Println()
}

func main() {
    arr := []int{5, 10, 15, 20, 25}
    traverseArray(arr)
}
for i := 0; i < len(arr); i++ {
start from first index and move forward until last index
fmt.Print(arr[i], " ")
access and print current element at index i
OutputSuccess
5 10 15 20 25
Complexity Analysis
Time: O(n) because we visit each element once
Space: O(1) because no extra space is used besides loop variables
vs Alternative: Compared to random access, traversal is simple and direct with no overhead
Edge Cases
empty array
loop does not run, nothing is printed
DSA Go
for i := 0; i < len(arr); i++ {
single element array
prints the single element once
DSA Go
for i := 0; i < len(arr); i++ {
When to Use This Pattern
When you need to process or check every item in a list or array, use array traversal to visit each element in order.
Common Mistakes
Mistake: Using <= instead of < in loop condition causing out-of-range error
Fix: Use i < len(arr) to avoid accessing beyond last index
Mistake: Modifying array length inside traversal loop causing unexpected behavior
Fix: Avoid changing array size during traversal or handle carefully
Summary
Visits each element in an array one by one.
Use when you want to read or update every item in order.
Remember to start at zero and stop before the array length.

Practice

(1/5)
1. What does the following Go code snippet do?
for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) }
easy
A. Prints each element of the array from start to end
B. Prints the array elements in reverse order
C. Prints only the first element of the array
D. Causes a runtime error due to index out of range

Solution

  1. Step 1: Understand the loop structure

    The loop starts at index 0 and runs while i is less than the length of the array, increasing i by 1 each time.
  2. Step 2: Analyze the print statement inside the loop

    Each iteration prints the element at index i, so all elements from start to end are printed in order.
  3. Final Answer:

    Prints each element of the array from start to end -> Option A
  4. Quick Check:

    Loop from 0 to len(arr)-1 prints all elements [OK]
Hint: Loop from 0 to len(arr) prints all elements in order [OK]
Common Mistakes:
  • Thinking it prints in reverse order
  • Assuming it prints only one element
  • Confusing loop condition causing error
2. Which of the following is the correct syntax to traverse an array arr using a range-based for loop in Go?
easy
A. for value in arr { fmt.Println(value) }
B. for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) }
C. for index, value := range arr { fmt.Println(index, value) }
D. foreach i in arr { fmt.Println(arr[i]) }

Solution

  1. Step 1: Recall Go's range syntax

    Go uses for index, value := range arr to iterate over arrays or slices.
  2. Step 2: Check each option

    for index, value := range arr { fmt.Println(index, value) } matches the correct syntax. for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } is valid but not range-based. Options C and D are invalid Go syntax.
  3. Final Answer:

    for index, value := range arr { fmt.Println(index, value) } -> Option C
  4. Quick Check:

    Range loop syntax = for index, value := range arr { fmt.Println(index, value) } [OK]
Hint: Use 'for index, value := range arr' for range loops in Go [OK]
Common Mistakes:
  • Using Python or other language syntax
  • Confusing traditional for loop with range loop
  • Using invalid keywords like foreach
3. What is the output of the following Go code?
arr := []int{10, 20, 30, 40}
for i := len(arr) - 1; i >= 0; i-- {
    fmt.Print(arr[i], " ")
}
medium
A. 10 20 30 40
B. 40 30 20 10
C. Runtime error due to invalid index
D. No output

Solution

  1. Step 1: Understand the loop range

    The loop starts at index len(arr)-1 (3) and decrements i until it reaches 0.
  2. Step 2: Trace the printed values

    Indexes printed: 3, 2, 1, 0 corresponding to values 40, 30, 20, 10 printed with spaces.
  3. Final Answer:

    40 30 20 10 -> Option B
  4. Quick Check:

    Reverse loop prints elements backward [OK]
Hint: Loop from len(arr)-1 down to 0 prints array in reverse [OK]
Common Mistakes:
  • Assuming forward order output
  • Off-by-one errors causing runtime error
  • Confusing loop condition direction
4. Identify the error in this Go code snippet that tries to print all elements of an array arr:
for i := 0; i <= len(arr); i++ {
    fmt.Println(arr[i])
}
medium
A. The print statement syntax is incorrect
B. The loop variable should start from 1 instead of 0
C. The array arr is not declared
D. The loop condition should be i < len(arr) to avoid index out of range

Solution

  1. Step 1: Analyze the loop condition

    The loop runs while i <= len(arr), which means i can equal len(arr), an invalid index.
  2. Step 2: Understand array indexing

    Array indexes go from 0 to len(arr)-1. Accessing arr[len(arr)] causes runtime error.
  3. Final Answer:

    The loop condition should be i < len(arr) to avoid index out of range -> Option D
  4. Quick Check:

    Index must be less than length, not less or equal [OK]
Hint: Use i < len(arr) to avoid out-of-range errors [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Starting loop at 1 instead of 0
  • Ignoring array declaration errors
5. Given an array arr := []int{1, 2, 3, 4, 5}, which code snippet correctly prints only the elements at even indexes (0, 2, 4)?
hard
A. for i := 0; i < len(arr); i += 2 { fmt.Print(arr[i], " ") }
B. for i := 1; i < len(arr); i += 2 { fmt.Print(arr[i], " ") }
C. for _, v := range arr { if v%2 == 0 { fmt.Print(v, " ") } }
D. for i := len(arr)-1; i >= 0; i-- { if i%2 == 1 { fmt.Print(arr[i], " ") } }

Solution

  1. Step 1: Understand the requirement

    We want to print elements at even indexes: 0, 2, 4.
  2. Step 2: Check each option

    for i := 0; i < len(arr); i += 2 { fmt.Print(arr[i], " ") } increments i by 2 starting at 0, correctly accessing even indexes. for i := 1; i < len(arr); i += 2 { fmt.Print(arr[i], " ") } accesses odd indexes. for _, v := range arr { if v%2 == 0 { fmt.Print(v, " ") } } prints even values, not indexes. for i := len(arr)-1; i >= 0; i-- { if i%2 == 1 { fmt.Print(arr[i], " ") } } prints odd indexes in reverse.
  3. Final Answer:

    for i := 0; i < len(arr); i += 2 { fmt.Print(arr[i], " ") } -> Option A
  4. Quick Check:

    Increment by 2 from 0 prints even indexes [OK]
Hint: Increment index by 2 starting at 0 for even indexes [OK]
Common Mistakes:
  • Confusing even indexes with even values
  • Starting loop at 1 instead of 0
  • Using incorrect loop increments
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard