Golang流程控制语句

慈云数据 7个月前 (05-09) 技术支持 36 0

文章目录

  • 顺序控制
  • 分支控制
    • if语句
    • switch语句
    • 循环控制
      • for循环语句
      • 跳转控制
        • break语句
        • continue语句
        • goto语句
        • return语句

          顺序控制

          顺序控制

          默认情况下,Go代码执行顺序是按照从上到下依次执行的,这种按照顺序执行的代码就叫做顺序语句。如下:

          package main
          import "fmt"
          func main() {
          	// 顺序控制
          	fmt.Println("statement 1...")
          	fmt.Println("statement 2...")
          	fmt.Println("statement 3...")
          }
          

          分支控制

          if语句

          if语句

          Go中if语句的基本语法如下:

          在这里插入图片描述

          使用案例如下:

          package main
          import "fmt"
          func main() {
          	// if语句
          	var num1, num2 int = 10, 20
          	if num1 > num2 {
          		fmt.Println("num1 > num2")
          	} else if num1  
          

          说明一下:

          • 执行if语句时,会依次判断各个条件表达式,找到第一个结果为true的if分支并执行对应的代码块,如果所有条件表达式都不成立,则执行最后的else代码块。
          • if语句中的else if分支可以有一个或多个,最后的else分支是可选的,if语句支持嵌套。
          • 每一个if分支的{}都是必须的,就算代码块中只有一行代码也不能省略,否则会产生报错。
          • if语句中的条件表达式不需要用()包裹,虽然加上也不会报错,但是不建议这样做。
          • if语句的条件表达式不能是赋值语句,比如if flag = false,否则会产生报错。

            if后声明变量

            if语句支持在if后声明一个变量,并以分号结束,然后在分号后面再给出条件表达式。如下:

            package main
            import "fmt"
            func main() {
            	// if后声明变量
            	var num = 10
            	if base := 20; num  
            

            注意: 在if后声明的变量仅在if语句中有效。

            switch语句

            switch语句

            Go中switch语句的基本语法如下:

            在这里插入图片描述

            使用案例如下:

            package main
            import "fmt"
            func main() {
            	// switch语句
            	var year, month int = 2024, 4
            	switch month {
            	case 1, 3, 5, 7, 8, 10, 12:
            		fmt.Println("这个月有31天")
            	case 4, 6, 9, 11:
            		fmt.Println("这个月有30天")
            	case 2:
            		day := 28
            		if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {
            			day++
            		}
            		fmt.Printf("这个月有%d天\n", day)
            	default:
            		fmt.Println("无效月份!")
            	}
            }
            

            说明一下:

            • 执行switch语句时,会将表达式依次与各个case后的表达式进行比较,如果匹配成功,则执行对应case的代码块,如果所有case后的表达式都不匹配,则执行最后的default代码块,最后的default是可选的。
            • switch语句中的case可以有多个,并且每个case后可以带多个表达式,表达式之间使用逗号分隔。程序执行完case语句的代码块后会直接退出switch控制,不需要在代码块最后加break语句。
            • switch和case后面的表达式可以是常量值、变量、有返回值的函数调用等,case后的表达式如果是常量值(字面量),则要求不能重复。case后的各个表达式的值的数据类型,必须和switch后的表达式的数据类型一致。

              switch后声明变量

              switch语句支持在switch后声明一个变量,并以分号结束,然后在分号后面再给出表达式。如下:

              package main
              import "fmt"
              func main() {
              	// switch后声明变量
              	switch year, month := 2024, 4; month {
              	case 1, 3, 5, 7, 8, 10, 12:
              		fmt.Println("这个月有31天")
              	case 4, 6, 9, 11:
              		fmt.Println("这个月有30天")
              	case 2:
              		day := 28
              		if (year%4 == 0 && year%100 != 0) || (year%400 == 0) {
              			day++
              		}
              		fmt.Printf("这个月有%d天\n", day)
              	default:
              		fmt.Println("无效月份!")
              	}
              }
              

              注意: 在switch后声明的变量仅在switch语句中有效。

              switch穿透

              在执行完对应的case语句的代码块后,程序会直接退出switch控制,如果希望程序继续执行下一个case语句的代码块,可以在代码块的最后通过fallthough关键字实现switch穿透。如下:

              package main
              import "fmt"
              func main() {
              	// switch穿透
              	var num int = 2
              	switch num {
              	case 1:
              		fmt.Println("case 1 block...")
              	case 2:
              		fmt.Println("case 2 block...")
              		fallthrough // 继续执行下一个case的代码块
              	case 3:
              		fmt.Println("case 3 block...")
              	default:
              		fmt.Println("default block...")
              	}
              }
              

              注意: switch穿透默认只会穿透一层,如果希望执行下面更多case的代码块,需要再次穿透。

              Type Switch

              switch语句可以用于判断某个interface变量实际指向的变量类型,然后根据不同的类型执行相应的代码逻辑。如下:

              package main
              import "fmt"
              func main() {
              	// Type Switch
              	var num int = 10
              	var x interface{} = num
              	switch t := x.(type) {
              	case int:
              		fmt.Println("int类型")
              	case float64:
              		fmt.Println("float64类型")
              	case string:
              		fmt.Println("string类型")
              	default:
              		fmt.Printf("未处理类型: %T\n", t)
              	}
              }
              

              说明一下:

              • interface{}叫做空接口类型,其可以接收任意类型的变量值,在必要时需要通过类型断言的方式获取到变量原本的类型,而Type Switch就是一种类型断言的方式。

                无表达式的switch

                switch语句后可以不带表达式,这时在case后放条件表达式可以达到if语句的效果。如下:

                package main
                import "fmt"
                func main() {
                	// 无表达式的switch
                	var num1, num2 int = 10, 20
                	switch {
                	case num1 > num2:
                		fmt.Println("num1 > num2")
                	case num1  
                

                说明一下:

                • 这里每个case后也可以带多个条件表达式,表达式之间使用逗号分隔。

                  循环控制

                  for循环语句

                  for循环语句

                  Go中for循环语句的基本语法如下:

                  在这里插入图片描述

                  使用案例如下:

                  package main
                  import (
                  	"fmt"
                  )
                  func main() {
                  	// for循环语句
                  	for i := 1; i 
                  		fmt.Printf("%d ", i)
                  	}
                  	fmt.Println()
                  }
                  
                  	// for循环语句
                  	i := 1
                  	for i 
                  		fmt.Printf("%d ", i)
                  		i++
                  	}
                  	fmt.Println()
                  }
                  
                  	// for循环语句
                  	for {
                  		fmt.Println("这是一个死循环...")
                  		time.Sleep(time.Second)
                  	}
                  }
                  
                  	// for range循环
                  	var s string = "Hello 世界"
                  	for index, value := range s {
                  		fmt.Printf("s[%d] = %c\n", index, value)
                  	}
                  }
                  
                  	// break语句
                  	for i := 0; i 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon