Go
Go Basics - 9. Loops in Go
Updated:
In this article, we are going to explore how loops work in the Go programming language.
For loop
Looping in Go is rather straightforward as there is only one kind of loop in Go, the for
loop.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 7; i++ {
fmt.Println(i)
}
}
/*
The result of the code above is:
0
1
2
3
4
5
6
*/
You can also initialize more than one variable within your for
loop.
package main
import (
"fmt"
)
func main() {
for i, j := 0, 0; i < 7; i, j = i+1, j+1 {
fmt.Println(i, j)
}
}
/*
The result of the code above is:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
*/
Go also provides some nice 'syntactic sugar' to write our for
loops to make them a little cleaner and easier to read.
package main
import (
"fmt"
)
func main() {
i := 0
for i < 7 {
fmt.Println(i)
i++
}
}
/*
The result of the code above is:
0
1
2
3
4
5
6
*/
It is also important to note that in the above example we are initializing the variable i
above the for
loop so we can get access to it later on.
package main
import (
"fmt"
)
func main() {
i := 0
for i < 7 {
i++
}
fmt.Println(i)
}
/*
The result of the code above is: 7
*/
In we initialize our variable, in this case i
, within the for
loop, then i
is scoped
to the loop and is not accessible outside of it.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 7; i++ {
}
fmt.Println(i)
}
/*
The result of the code above is:
undefined: i
*/
Infinite Loops
Other programming languages have additional loops like while
or do
loops. These loops continue to loop for an indeterminate amount of time until some logic within the loop tells it to stop. We can achieve this same behavior using the break
keyword.
package main
import (
"fmt"
)
func main() {
i := 0
for {
i++
if i == 7 {
break
}
}
fmt.Println(i)
}
/*
The result of the code above is: 7
*/
If we forget to put in the break
keyword this loop becomes an 'infinite loop' and causes our program to run out of memory and crash.
Go also has a continue
keyword that allows us to have more control of when the code within our for
loop executes.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 7; i++ {
// if the number is even, continue the loop
if i%2 == 0 {
continue
}
// if the number is odd, print the number
fmt.Println(i)
}
}
/*
The result of the code above is:
1
3
5
*/
Looping through collections
When looping through collections, we use a 'modified' for
loop and introduce a new keyword called range
.
package main
import (
"fmt"
)
func main() {
s := []int{1, 2, 3, 4, 5, 6, 7}
for k, v := range s {
fmt.Println(k, v)
}
}
/*
The result of the code above is:
0 1
1 2
2 3
3 4
4 5
5 6
6 7
*/
If you are not concerned about the key
of the item in the collection, you can use _
to ignore it.
package main
import (
"fmt"
)
func main() {
s := []int{1, 2, 3, 4, 5, 6, 7}
for _, v := range s {
fmt.Println(v)
}
}
/*
The result of the code above is:
1
2
3
4
5
6
7
*/
This kind of loop can be used with slices
, arrays
, maps
, and even strings
.
package main
import (
"fmt"
)
func main() {
s := "Hello, World!"
for k, v := range s {
fmt.Println(k, v)
}
}
/*
The result of the code above is:
0 72
1 101
2 108
3 108
4 111
5 44
6 32
7 87
8 111
9 114
10 108
11 100
12 33
*/
Characters within a string are Unicode numbers in Go
You can find a list of all of the Unicode numbers here
Wrap Up
In this article, we learned how to create and work with loops in Go.