循环语句的三种形式
与C、java、python不同的是GO只存在for循环语句,但是Go的for循环语句也能够起到其他语言中while语句的作用
下面展示三种for循环的使用方式
常规for循环
for i:=初始值; i <= 终止值; i++ {
//代码块
}
充当while的for循环
i:=初始值
for i < 结束值 {
// 代码块
// i向着结束值方向改变
}
for与range配合使用
需要注意的是for与range配合进行迭代时迭代的变量必须可迭代类型:数组或者字典
for idx, value range m { // m为可迭代的变量
//代码块
}
for 循环示例
package main
import "fmt"
func main(){
for i:=0; i < 10; i++ {
fmt.Printf("i:%v\n", i)
}
fmt.Printf("\n")
i:=0
for i < 10 {
fmt.Printf("i:%v\n", i)
i++
}
var a = []int{1, 2, 3, 4, 5}
for idx, value := range a {
fmt.Printf("idx:%v, value:%v\n", idx, value)
}
mp:=make(map[int]string, 0)
mp[0] = "hello"
mp[1] = "world"
for key, value := range mp {
fmt.Printf("key:%v, value:%v\n", key, value)
}
}
终止循环
break
如果在循环中直接写break则break退出的是break所在的循环;同时Go允许我们在进入某一层循环前定义一个标签,可以在break时指定标签使得可以直接退出标签指定的循环
示例
我们假定我们有两个循环,我们要在找到两循环和为10的情况下退出循环
直接break的情况
package main
import "fmt"
func main(){
for i:=0; i < 10; i++ {
for j:=0; j < 10; j++ {
fmt.Printf("i:%v, j:%v, sum:%v\n", i, j, i + j)
if i + j >= 10{
break
}
}
}
}
从运行结果来看并没有达到我们的要求,因为单独使用break只能退出当前break所在的循环
带标签的break
package main
import "fmt"
func main(){
ENDLABEL:
for i:=0; i < 10; i++ {
for j:=0; j < 10; j++ {
fmt.Printf("i:%v, j:%v, sum:%v\n", i, j, i + j)
if i + j >= 10{
break ENDLABEL
}
}
}
}
continue
continue的基本定义和其他语言无异,与break一样,它也可以定义一个标签,直接continue标签下的循环