跟我一起来学golang之《分支语句》| 8月更文挑战

428 阅读3分钟

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

我们接下来继续学习一下golang的分支语句,分支语句包括if语句,switch语句,select语句等,即通过条件判断进而选择执行哪部分逻辑。

程序的流程控制结构一共有三种:

顺序结构:从上向下,逐行执行。

选择结构:条件满足,某些代码才会执行。

分支语句:if,switch,select

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

if语句

语法格式:

/*
        单分支结构语法格式如下:
            if 条件判断 {
                //代码块
            }

        条件判断如果为真(true),那么就执行大括号中的代码块;如果为假(false),就不执行大括号中的代码块。
    */

代码示例:

func main() {
  
    var score int

    fmt.Printf("请输入你的分数:>>> ")
    fmt.Scan(&score)

    if score >= 60 {
        fmt.Println("恭喜你,你已经及格了")
    }
}

除了以上比较简单的单逻辑if判断还有以下几种:

if bool {
   /* 在布尔表达式bool为 true 时执行 */
} else {  //注意该位置的else不能换行
  /* 在布尔表达式bool为 false 时执行 */
}

if bool {
   /* 在布尔表达式bool为 true 时执行 */
} else if bool{
   /* 在布尔表达式bool为 false ,布尔表达式bool为true时执行 */
} else{
   /* 在上面两个布尔表达式都为false时,执行*/
}

在if语句中golang还支持if的几种变形,我们接下来看一下:

if statement; condition {  
}

if condition{
       
}

来个例子:num的定义在if里,那么只能够在该if..else语句块中使用

func main() {  
    if num := 10; num % 2 == 0 { 
        fmt.Println(num,"is even") 
    }  else {
        fmt.Println(num,"is odd")
    }
}

switch语句

switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。

switch 语句从上直下逐一测试,直到匹配为止。 switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

如果switch没有表达式,它会匹配true,如果每个case表达式都被计算为true,那么就会执行相应的代码块。

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}
var str = "hel
//基本用法
switch str {
case "good":
    fmt.Println("Good morning")
case "hello":
    fmt.Println("hello everyone")
default:
    fmt.Println("。。。。")
}

fallthrough

如需贯通后续的case,就添加fallthrough

package main

import (
	"fmt"
)

type data [2]int

func main() {
	switch x := 5; x {
	default:
		fmt.Println(x)
	case 5:
		x += 10
		fmt.Println(x)
		fallthrough
	case 6:
		x += 20
		fmt.Println(x)

	}

}

运行结果:

15
35

switch的注意事项

  1. case后的常量值不能重复
  2. case后可以有多个常量值
  3. fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。

Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

switch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    
    default: 
       statement(s);
}

package main

import "fmt"

func main() {
   var x interface{}
     
   switch i := x.(type) {
      case nil:	  
         fmt.Printf("x 的类型 :%T",i)                
      case int:	  
         fmt.Printf("x 是 int 型")                       
      case float64:
         fmt.Printf("x 是 float64 型")           
      case func(int) float64:
         fmt.Printf("x 是 func(int) 型")                      
      case bool, string:
         fmt.Printf("x 是 bool 或 string 型" )       
      default:
         fmt.Printf("未知型")     
   }   
}