Golang初级系列教程-控制结构-For/break/continue/range
for 语句是 Go 中唯一的循环语句。通用语句定义如下:
*for “initialization statements”; “bool expression that has to evaluate to true”; “statements run prior to every loop except the first” {
//code to be executed if the boolean expression evaluates to true
}*
for 语句中三部分中的任意一部分都可以没有内容,但是分号必须存在(除非三部分全部没有,这时分号也可以不要),最好的方式就是实践喽,运行如下代码。
package main
import "fmt"
func main() {
// initialize i to 0; check each time that i is less than 5; increment i for each loop after the first
for i := 0; i < 5; i++ {
fmt.Println("Value of i is now:", i)
}
}Value of i is now: 0
Value of i is now: 1
Value of i is now: 2
Value of i is now: 3
Value of i is now: 4以下代码片段都是有效的语言,依次可以验证上述内容。
//prints increasing value of i infinitely, since the middle check statement does not exist
for i := 0; ; i++ {
fmt.Println("Value of i is now:", i)
}
//prints "value of i is: 0" infinitely since the incrementing part is not there and i can never reach 3
for i := 0; i < 3; {
fmt.Println("Value of i:", i)
}
//here both initialization and incrementing is missing in the for statement, but it is managed outside of it
s := ""
for ; s != "aaaaa"; {
fmt.Println("Value of s:", s)
s = s + "a"
}通过运用多赋值模式(i, j = i + 2, j + 2),在 for 语句中,可以使用多个赋值语句,同样可以递增或者更新多个变量的值。
在其它语言中,可以通过 , 实现,但是请注意,在 Go 中不允许这样的语句。
package main
import "fmt"
func main() {
//multiple initialization; a consolidated bool expression with && and ||; multiple ‘incrementation’
for i, j, s := 0, 5, "a"; i < 3 && j < 100 && s != "aaaaa"; i, j, s = i+1, j+1, s + "a" {
fmt.Println("Value of i, j, s:", i, j, s)
}
}
Value of i, j, s: 0 5 a
Value of i, j, s: 1 6 aa
Value of i, j, s: 2 7 aaabreak关键字
break 关键字可以在当前位置终止循环,并继续在 for 结束的位置继续执行之后的语句。在下面简单的例子中,我们在遇到一个特定的条件之后使用 break 语句。由于 for 语句没有判定条件,如果不执行 break,将会陷入无限循环。注意:break 不会终止程序的运行,只是跳出循环,继续执行 } 之后的语句。
package main
import "fmt"
func main() {
i := 0
for { //since there are no checks, this is an infinite loop
if i >= 3 { break } //break out of this for loop when this condition is met
fmt.Println("Value of i is:", i)
i++;
}
fmt.Println("A statement just after for loop.")
}Value of i is: 0
Value of i is: 1
Value of i is: 2
A statement just after for loop.continue 关键字
continue 是让程序重新从 for 循环的开始处执行。条件判定和自增部分都会执行,也就是说进入了下一次的迭代循环。也表现为跳过了 continue 之后的语句,而直接进入下一次循环。
在下面的例子中,使用 continue 语句只把奇数打印出来。当遇到一个偶数(i 余 2 为 0),跳过打印输出语句,并且开始执行下一次循环。
package main
import "fmt"
func main() {
//a continue within this loop will bring back execution to the beginning of the loop. Checks and increments in for loop will be executed.
for i := 0; i<7 ; i++ { //control comes back here when there is a ‘continue’ within this for block
if i%2 == 0 {
continue //if it is an even number, go back to beginning of for loop
}
fmt.Println("Odd:", i) //execution will reach here only when i%2 is not 0, and therefore it is odd
}
}Odd: 1
Odd: 3
Odd: 5range 关键字
range 关键字用来遍历 list、array 或者 map。为了方便理解,可以认为 range 等效于 for earch index of。对于 arrays 或者 slices, 将会返回整型的下标;对于 map,将会返回下一个键值对的 key。 支持返回单值或者两个值, 如果返回一个值,那么为下标,否则为下标和下标所对应的值。
package main
import "fmt"
func main() {
//on an array, range returns the index
a := [...]string{"a", "b", "c", "d"}
for i := range a {
fmt.Println("Array item", i, "is", a[i])
}
//on a map, range returns the key
capitals := map[string] string {"France":"Paris", "Italy":"Rome", "Japan":"Tokyo" }
for key := range capitals {
fmt.Println("Map item: Capital of", key, "is", capitals[key])
}
//range can also return two items, the index/key and the corresponding value
for key2, val := range capitals {
fmt.Println("Map item: Capital of", key2, "is", val)
}
}Array item 0 is a
Array item 1 is b
Array item 2 is c
Array item 3 is d
Map item: Capital of Japan is Tokyo
Map item: Capital of Italy is Rome
Map item: Capital of France is Paris
Map item: Capital of Japan is Tokyo
Map item: Capital of Italy is Rome
Map item: Capital of France is ParisGolang一种神奇的语言,让我们一起进步