zoukankan      html  css  js  c++  java
  • Go流程结构(for)

    一、程序的流程结构

    程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。

    顺序结构:代码从上向下逐行的执行

    选择结构:条件满足,某些代码才会被执行。0-1次

    if语句,switch语句

    循环结构:条件满足,某些代码会被反复的多次执行。0-n次

    for语句

    二、循环语句

    循环语句表示条件满足,可以反复的执行某段代码。

    for是唯一的循环语句。(Go没有while循环)

    2.1 for语句

    语法结构:

     for init; condition; post { }

    初始化语句只执行一次。在初始化循环之后,将检查该条件。如果条件计算为true,那么{}中的循环体将被执行,然后是post语句。post语句将在循环的每次成功迭代之后执行。在执行post语句之后,该条件将被重新检查。如果它是正确的,循环将继续执行,否则循环终止。

    示例代码:

     package main
     ​
     import (  
         "fmt"
     )
     ​
     func main() {  
         for i := 1; i <= 10; i++ {
             fmt.Printf(" %d",i)
         }
     }

    在for循环中声明的变量仅在循环范围内可用。因此,i不能在外部访问循环。

     

    2.2 for循环变体

    所有的三个组成部分,即初始化、条件和post都是可选的。

     for condition { }

    效果与while相似

     for { }
    package main
    
    import "fmt"
    
    func main() {
    	/*
    	1. 标准写法:
    		for 表达式1;表达式2;表达式3{
    			循环体
    		}
    	2.同时省略表达式1和表达式3
    		for 表达式2{
    
    		}
    	相当于while(条件)
    	3.同时省略3个表达式
    		for{
    
    		}
    	相当于while(true)
    	注意点:当for循环中,省略了表达式2,就相当于直接作用在了true上
    
    	4.其他的写法:for循环中同时省略几个表达式都可以。。
    		省略表达式1:
    		省略表达式2:循环永远成立-->死循环
    		省略表达式3:
    	 */
    	i := 1
    	for i <= 5 {
    		fmt.Println(i)
    		i++
    	}
    	fmt.Println("-->",i)
    
    	fmt.Println("------------")
    	for{
    		fmt.Println("i--->",i)
    		i++
    	}
    }

    for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

     for key, value := range oldMap {
         newMap[key] = value
     }
     package main
     ​
     import "fmt"
     ​
     func main() {
     ​
        var b int = 15
        var a int
     ​
        numbers := [6]int{1, 2, 3, 5} 
     ​
        /* for 循环 */
        for a := 0; a < 10; a++ {
           fmt.Printf("a 的值为: %d
    ", a)
        }
     ​
        for a < b {
           a++
           fmt.Printf("a 的值为: %d
    ", a)
           }
     ​
        for i,x:= range numbers {
           fmt.Printf("第 %d 位 x 的值 = %d
    ", i,x)
        }   
     }

    2. 3 多层for循环

    for循环中又有循环嵌套,就表示多层循环了。

     

    三、跳出循环的语句

    1、 break语句

    break:跳出循环体。break语句用于在结束其正常执行之前突然终止for循环

    示例代码:

     package main
     ​
     import (  
         "fmt"
     )
     ​
     func main() {  
         for i := 1; i <= 10; i++ {
             if i > 5 {
                 break //loop is terminated if i > 5
             }
             fmt.Printf("%d ", i)
         }
         fmt.Printf("
    line after for loop")
     }

    2、continue语句

    continue:跳出一次循环。continue语句用于跳过for循环的当前迭代。在continue语句后面的for循环中的所有代码将不会在当前迭代中执行。循环将继续到下一个迭代。

    示例代码:

     package main
     ​
     import (  
         "fmt"
     )
     ​
     func main() {  
         for i := 1; i <= 10; i++ {
             if i%2 == 0 {
                 continue
             }
             fmt.Printf("%d ", i)
         }
     }

    四、goto语句

    goto:可以无条件地转移到过程中指定的行。

    语法结构:

     goto label;
     ..
     ..
     label: statement;
    package main
    
    import "fmt"
    
    func main() {
    	/*
    	goto语句:
    
    	 */
    
    	var a = 10
    LOOP:
    	for a < 20 {
    		if a == 15 {
    			a += 1
    			goto LOOP
    		}
    		fmt.Printf("a的值为:%d
    ", a)
    		a++
    	}
    
    	fmt.Println("----------------")
    	for i := 0; i < 10; i++ {
    		for j := 0; j < 10; j++ {
    			if j == 2 {
    				goto breakHere
    			}
    			fmt.Println("j的值为", j)
    		}
    	}
    
    breakHere:
    	fmt.Println("done...")
    }

    统一错误处理 多处错误处理存在代码重复时是非常棘手的,例如:

         err := firstCheckError()
         if err != nil {
             goto onExit
         }
         err = secondCheckError()
         if err != nil {
             goto onExit
         }
         fmt.Println("done")
         return
     onExit:
         fmt.Println(err)
         exitProcess()
    

     
     

     

  • 相关阅读:
    fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
    cvWaitKey 如果 cvNamedWindow就不会起作用
    Java 并发基础
    简化Getter 与 Setter 的插件 Lombok
    20、状态模式
    mybatis-generator 覆盖新增XML
    Jvm 虚拟机
    18、备忘录设计模式
    16、 观察者设计模式
    08、仲载者 -中间者模式
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12244776.html
Copyright © 2011-2022 走看看