for 循环的执行过程和其它编程语言一样,首先先赋初值,接着 condition 判断是否满足条件,满足则继续执行循环内的语句,结束之后再执行 post 表达式,进入下一个循环,判断 condition,如果为假则跳出循环 for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环,如下:
1 2 3
for key, value := range oldMap { newMap[key] = value }
func main() { strings := []string{"nnnpc", "good"} for i, s := range strings { fmt.Println(i, s) }
strings1 := [6]string{"n", "n", "n", "p", "c"} for i, x := range strings1 { fmt.Printf("第 %d 位 x 的值 = %d\n", i, x) } }
输出:
以上代码可以大体分为两块,第一块是变量 strings,默认赋给了变量两个空间,分别用字符串 nnnpc 和 good 占用,利用 range 将 strings 中的 key 值和 value 值迭代赋值给变量 i 和 s,并且循环将 i,s 输出。第二块则是变量 strings1,确定了六个空间给 strings1,并且五个空间分别用字母占用,同样的将 key 值和 value 值赋给了 i,x,使用 range 来进行迭代循环输出
for key, value := range map1 { fmt.Printf("key is: %d - value is: %f\n", key, value) }
for key := range map1 { fmt.Printf("key is: %d\n", key) } fmt.Printf("=================省略value也可如下书写=====================\n") for key, _ := range map1 { fmt.Printf("key is: %d\n", key) } fmt.Printf("==========================================================\n") for _, value := range map1 { fmt.Printf("value is: %f\n", value) } }
package main import "fmt" func main() { day := "Tuesday" switch day { case "Monday": fmt.Println("It's Monday.") case "Tuesday": fmt.Println("It's Tuesday.") break case "Wednesday": fmt.Println("It's Wednesday.") } }
刚开始给 day 声明赋值为 Tuesday 而 switch 语句中 case 也是 Tuesday 时执行 break,也就是输出 It's Tuesday 并跳出 switch 语句 输出:
Go 语言的 continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。 for 循环中,执行 continue 语句会触发 for 增量语句的执行。 在多重循环中,可以用标号 label 标出想 continue 的循环。
通俗的来讲 continue 的作用就是跳过本次循环执行下一次循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
package main import "fmt" func main() { /* 定义局部变量 */ var a int = 10 /* for 循环 */ for a < 20 { if a == 15 { /* 跳过此次循环 */ a = a + 1; continue; } fmt.Printf("a 的值为 : %d\n", a); a++; } }
输出:
该程序当 a 的值为 15 时就跳过该次循环,也就是不执行输出和自加,通过 a=a+1 之后执行下一次的循环,因此输出里面没有值为 15
package main import "fmt" func main() { // 不使用标记 fmt.Println("---- continue ---- ") for i := 1; i <= 3; i++ { fmt.Printf("i: %d\n", i) for i2 := 11; i2 <= 13; i2++ { fmt.Printf("i2: %d\n", i2) continue } } // 使用标记 fmt.Println("---- continue label ----") re: for i := 1; i <= 3; i++ { fmt.Printf("i: %d\n", i) for i2 := 11; i2 <= 13; i2++ { fmt.Printf("i2: %d\n", i2) continue re } } }
输出:
可以明显看到没用标记之前每个 i 对应三个 i2,使用之后每个 i 对应一个 i2。正是因为标记 re 在整个大 for 循环外面,当执行一次循环之后直接跳出了本次的大 for 循环,回到了起始位置。而没有标记的只是正常结束之后跳出本次的小 for 循环,进行下一次,直到执行三次后不满足小 for 循环条件之后跳回大 for 循环