Go的循环语句学习笔记 | 青训营笔记

81 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。

一、if语句

语法格式

关键:if后面没有()

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

实战

/**
  1、if语句
 */
func Test_06_01(t *testing.T){
    //1、常见写法
    var num int = 10
    if num < 10 {
        fmt.Println("<10")
    }
    fmt.Println(">=10")
​
    //2、变体。(前者相当于进行定义变量初始化,后者进行判断)
    if num1 := 20; num1 % 2 == 10 {
        fmt.Println("num1是偶数")
    }
    fmt.Println("num2是奇数")
}

二、switch

2.1、基本用法

1、两种方式:①传入值。②case后跟表达式

小细节:case会进行匹配,一旦匹配到直接结束

/**
  2、switch
*/
func Test_06_02(t *testing.T){
    /* 定义局部变量 */
    var grade string = "B"
    var marks int = 90//①可传入值来作为筛选条件
    switch marks {
        case 90: grade = "A"
        case 80: grade = "B"
        case 50,60,70 : grade = "C"  //case 后可以由多个数值
        default: grade = "D"
    }
​
    //2、不传入值,直接case来进行表达式筛选
    switch {
    case grade == "A" :
        fmt.Printf("优秀!\n" )
    case grade == "B", grade == "C" :
        fmt.Printf("良好\n" )
    case grade == "D" :
        fmt.Printf("及格\n" )
    case grade == "F":
        fmt.Printf("不及格\n" )
    default:
        fmt.Printf("差\n" );
    }
    fmt.Printf("你的等级是 %s\n", grade );
​
}

2.2、fallthrough

    //3、fallthrouht使用
    switch num := 15; num {
        default:
            fmt.Println("最大")
        case 15:
            fmt.Printf("是15\n")
            fallthrough
        case 20:
            fmt.Printf("fallthrough成功执行\n")
    }

image-20220423183103024

2.3、Type Switch(判断指定类型来执行)

/**
   2.3、Type Switch:类型判断
*/
func Test_06_02_02(t *testing.T) {
   var x interface{}  //预先声明为接口
​
   switch i := x.(type) {
      case nil:  //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("未知型")
   }
}

三、for循环

其中的迭代器写法相当于java中的for each:

/**
  三、for循环
 */
func Test_06_03(t *testing.T)  {
   //1、普通for循环
   for i := 0; i < 10; i++ {
      fmt.Print(i, " ")
   }
   fmt.Println()
   //2、单循环条件
   var a = 5
   for a < 10 {
      fmt.Print(a, " ")
      a++
   }
   fmt.Println()
   //3、迭代器遍历:slice、map、数组、字符串等
   nums := [6]int{1,2,3,4,5}
   for i,x := range nums{
      fmt.Println("第",i,"位置,值为:", x)
   }
}

四、跳出循环

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

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

五、goto跳转

格式:标签: goto 标签

/**
    五、goto跳转标签
 */
func Test_06_05(t *testing.T)  {
    i := 5
    loop: for ; i < 10; i++ {
        if i == 8 {
            i++
            goto loop  //跳转到loop标签
        }
        fmt.Println(i)
    }
}