Oliver's Blog
Search
⌃K

# Loops

## For Loop

package main
import "fmt"
func main() {
sum := 0
for i := 1; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
45

## While Loop (or just For Loop)

If we only have the middle statement of the for loop (condition), then the for loop behaves like a while loop as in other languages.
package main
import "fmt"
func main() {
power := 1
for power < 4 {
power *= 3
}
fmt.Println(power)
}
9
If we go one step further, removing the condition will result in an infinite loop.
package main
import "fmt"
func main() {
sum := 0
for { // infinite loop!
sum++
}
fmt.Println(sum) // unreachable code
}

## Range Keyword in For Loops

### Syntax:

for key, value := range collection {
// statements
}

### Example1 - Array:

package main
import "fmt"
func main() {
langs := []string{"Go", "C", "C++", "Java"}
for i, s := range langs {
fmt.Println(i, s)
}
}
0 Go
1 C
2 C++
3 Java

### Example2 - String:

package main
import "fmt"
func main() {
for i, s := range "Oliver" {
fmt.Printf("%U represents %c and it is at position %d\n", s, s, i)
}
}
U+004F represents O and it is at position 0
U+006C represents l and it is at position 1
U+0069 represents i and it is at position 2
U+0076 represents v and it is at position 3
U+0065 represents e and it is at position 4
U+0072 represents r and it is at position 5

### Example3 - Map:

In Go, `range` on map iterates over key/value pairs. It can also iterate over just the keys of a map.
package main
import "fmt"
func main() {
fruits := map[string]string{"A": "Apple", "B": "Banana", "C": "Cherry"}
// iterate over key value pairs
for key, value := range fruits {
fmt.Printf("%s -> %s\n", key, value)
}
// iterate over the keys
for key := range fruits {
fmt.Println("Key: ", key)
}
}
A -> Apple
B -> Banana
C -> Cherry
Key: A
Key: B
Key: C

### Example3 - Channel*(Discussed Later):

package main
import "fmt"
func main() {
ch := make(chan string)
go func() {
ch <- "O"
ch <- "L"
ch <- "I"
ch <- "V"
ch <- "E"
ch <- "R"
close(ch)
}()
for n := range ch {
fmt.Print(n)
}
}
OLIVER