Practical Loop Patterns
Introduction to Advanced Looping Techniques
Practical loop patterns in Go help developers write more efficient, readable, and concise code across various scenarios.
Common Loop Patterns
Iterating Over Collections
package main
import "fmt"
func main() {
// Slice iteration
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
// Map iteration
fruits := map[string]int{
"apple": 5,
"banana": 3,
"orange": 7,
}
for key, count := range fruits {
fmt.Printf("Fruit: %s, Count: %d\n", key, count)
}
}
Conditional Loop Breaking
package main
import "fmt"
func findPrime(limit int) []int {
primes := []int{}
for num := 2; len(primes) < limit; num++ {
if isPrime(num) {
primes = append(primes, num)
}
}
return primes
}
func isPrime(n int) bool {
if n <= 1 {
return false
}
for i := 2; i*i <= n; i++ {
if n%i == 0 {
return false
}
}
return true
}
func main() {
result := findPrime(10)
fmt.Println("First 10 primes:", result)
}
Loop Flow Visualization
graph TD
A[Start Loop] --> B{Condition Check}
B -->|True| C[Execute Body]
C --> D[Update Iterator]
D --> B
B -->|False| E[Exit Loop]
Advanced Iteration Techniques
Nested Loops with Labels
package main
import "fmt"
func main() {
outerLoop:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
fmt.Println("Breaking outer loop")
break outerLoop
}
fmt.Printf("i: %d, j: %d\n", i, j)
}
}
}
Loop Pattern Comparison
Pattern |
Use Case |
Performance |
Complexity |
Range Iteration |
Simple collections |
High |
Low |
Conditional Loops |
Complex filtering |
Medium |
Medium |
Nested Loops |
Multi-dimensional processing |
Low |
High |
Labeled Loops |
Advanced control flow |
Low |
High |
Concurrent Loop Patterns
package main
import (
"fmt"
"sync"
)
func main() {
numbers := []int{1, 2, 3, 4, 5}
var wg sync.WaitGroup
for _, num := range numbers {
wg.Add(1)
go func(n int) {
defer wg.Done()
fmt.Println("Processing:", n)
}(num)
}
wg.Wait()
}
Best Practices
- Choose the right loop pattern for your use case
- Optimize loop performance
- Avoid unnecessary complexity
- Use break and continue judiciously
- Consider concurrency for performance-critical loops
By mastering these practical loop patterns, you'll write more efficient Go code. LabEx encourages continuous learning and practice to improve your programming skills.