Go 循环控制

Posted mail-maomao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 循环控制相关的知识,希望对你有一定的参考价值。

#### Go 循环控制
昨天有工作要忙, 断更一天,不过学习的事情,还是每天要坚持;
我还有头发, 还能学习^_^.
***倘若我心中的山水, 你眼中都看到***
上一节学习完流程控制,总结一下switch 和 if 的区别;
1. 如果判断的具体数值不多, 而且符合整数,浮点数,字符,字符串这几种类型,建议使用switch语句;
2. 其它情况如: 区间判断和结果为bool类型的判断使用if;
---
##### for 循环控制
在Go 中只有一种循环,就是for 循环,这符合Go 的哲学思想: 少即是多;
for 基本语法:
for 循环变量初始化;循环条件;循环变量迭代
// 循环语句

for 循环执行流程分析

技术图片

 
for 循环注意事项和细节
1. for 条件循环返回的是一个bool 类型的表达式
2. for 循环的另一种使用方式
for 循环判断条件
// 循环语句

3. for 循环的第三种写法,类似于无限循环, 可以配合break 使用;
for
// 循环语句

4. for range 方式可以方便遍历字符串和数组
5. 如果字符串含有中文,使用传统的方式遍历字符串是错误的,会出现乱码: ***传统的方式对字符串的遍历是按照字节遍历,但是一个汉字在utf8中对应的编码为3个字节;**
将 str 转成[]rune 切片即可;
package main

import "fmt"

func main()
   for i:=0;i<10;i++
      fmt.Println(i)
   
   // for 循环的第二种写法
   var a = 1
   for a < 10 
      fmt.Println(a)
      a ++
   
   // for 循环的第三种写法
   // 这种写法等价于无限循环, 可以配合break 使用
   var b = 1
   for 
      if b >= 10 
         break
      
      b ++
   
   // for range
   var c = "abcdef"
   for i,val := range c 
      fmt.Printf("index=%d value=%c\\n",i,val)
   
   // 对于有中文的字符串遍历方式
   var d = "你好,世界!"
   // 传统方式
   str := []rune(d)
   for i:=0;i<len(str);i++
      fmt.Printf("index=%d value=%c\\n",i,str[i])
   
   // for range 方式
   for i,val := range d
      fmt.Printf("index=%d value=%c\\n",i,val)
   

  


##### while 的实现
Go 中没有while 或者while do 这种 语法, 但是可以通过for 循环来实现这种效果,见for 循环第三种方式;
##### 多层循环
将一个循环放在另一个循环体内,形成循环嵌套, 在外面的for 称为外层循环,在里面的for 称为内层循环,多重循环建议最多不超过3层;
外层循环次数为m 次, 内层为n次, 则内层循环体实际需要执行m*n 次;
package main

import "fmt"

func main()
   for i :=1;i<10;i++
      for j :=1;j<=i;j++
         fmt.Printf("%d * %d = %d\\t",j,i,i*j)
      
      fmt.Println()
   

  


##### break

技术图片

 
break 用于中断当前for 或跳出switch 语句; 默认情况下break 跳出最近的for 循环;当break 出现在多层循环中, 可以通过标签指明要终止哪一层循环;
package main

import "fmt"

func main()
   // 设置标签
   first:
      for i:=0;i<10;i++
         for j:=0;j<10;j++
            if j == 3 
               break first // 按标跳出
            
            fmt.Println(j)
         
      

  


##### continue

技术图片

   
continue 用于结束本次循环,继续执行下一次循环;默认情况下路过的是最近循环,当contine 出现在多层循环中, 可以通过标签指定要路过哪一层循环;
package main

import (
   "fmt"
   "strings"
)

func main() 

   for i := 0; i < 10; i++ 
      for j := 0; j < 10; j++ 
         if j == 3 
            continue
         
         fmt.Println(j)
      
   
   fmt.Println(strings.Repeat("=",100))
   first:
      for i := 0; i < 10; i++ 
         for j := 0; j < 10; j++ 
            if j == 3 
               continue first // continue 使用标签 
            
            fmt.Println(j)
         
      

  


##### goto 语句
Go 中可以使用goto 语句无条件转移到程序中指定的行
通常与条件语句配合使用;
在Go 中不建议使用goto 以免造成程序流程混乱,使理解和调试困难;
package main

import "fmt"

func main() 
   for i:=1;i<10;i++
      if i % 2 == 0 
         goto first
       else 
         fmt.Println(i)
      
   
   first:
      fmt.Println("this is goto block")

  


流程控制这块基本学习完啦, 下面我们将逐渐接触高级知识;
***学习,我们一直在路上***


以上是关于Go 循环控制的主要内容,如果未能解决你的问题,请参考以下文章

Go 循环控制

go语言学习笔记 — 基础 — 控制流:for循环语句

Go Web编程实战----流程控制语句

Go Web编程实战----流程控制语句

Go Web编程实战----流程控制语句

Go语言循环语句