Go for: Difference between revisions
(→for {}) |
|||
Line 20: | Line 20: | ||
All three expressions (initialization, condition and update) are optional: | All three expressions (initialization, condition and update) are optional: | ||
<syntaxhighlight lang='go'> | <syntaxhighlight lang='go'> |
Revision as of 23:22, 12 August 2024
External
- Language Specification for Statements https://golang.org/ref/spec#For_statements
Internal
Overview
There are four for
syntactical forms: the generic, C-like syntax with an init section, a condition and post section, a form where the iteration is controlled by a range
keyword, a form with just one condition, and a form that iterates forever, unless the body contains statements that exit the loop. There are no do
or while
loops in Go. In all four causes, the for statement specifies repeated execution of a block.
for init; condition; post {}
for range {}
for condition {}
for {}
All three expressions (initialization, condition and update) are optional:
i := 0
for i < 3 {
println(i)
i ++
}
i := 0
for {
if i == 3 {
break
}
println(i)
i ++
}
To iterate over an iterable structure, use range
:
ss := []string{"a", "b", "c"}
for index, value := range ss {
...
}
If the values of the iterable structure are not important, and only the number of elements matters, this syntax can also be used:
ss := []string{"a", "b", "c"}
for range ss {
...
}
To get consecutive integers in the loop, use this syntax (Go 1.22 and newer):
for i := range 10 {
println(i)
}
for
can be used to iterate over values received from a channel.
for Controlled by a Condition
for a < b { a *= 2 }
The condition is evaluated before each iteration. If the condition is absent, is equivalent with true.
for { // do this forever }
for Controlled by a "for" Clause
for controlled by a "for" clause is equivalent with for controlled by a condition, but it has an extra init and post statement:
for i := 0; i < 10; i++ { // do something }
for Controlled by a "range" Clause
A for statement with a "range" clause iterates through all entries of an array, slice, string or map, or values received on a channel. For each entry it assigns iteration values to corresponding iteration variables if present and then executes the block.
For arrays, maps and slices, for exits when all values are returned. For channels, for exists when the channel is closed.
var a [10]string for i, s := range a { // type of i is int // type of s is string // and s == a[i] // do something }
More about range:
Iterating over a slice from a non-zero index
for index := 5; index < len(slice); index ++ { // slice[index] ... }