PHPer的Go之路 -- 条件循环语句

臭大佬 2019-11-23 13:52:34 2040
Go 
简介 介绍Go的条件循环语句

if … else if … else …

Go的if和php不同之处在于以下几点:

  • 条件语句不需要使用圆括号将条件包含起来 ();
  • 无论语句体内有几条语句,花括号 {} 都是必须存在的;
  • 左花括号 { 必须与 if 或者 else 处于同一行;
  • Go中不能写成elseif,只有else if(需要分开)

栗子:

package main

import "fmt"

func main() {
    /* 定义局部变量 */
    var a int = 300
    var b int = 200
    /* 判断条件 */
    if a == 100 {
        fmt.Printf("a 值为 : %d\n", a );
    }else if b == 200 {
        fmt.Printf("b 值为 : %d\n", b );
    }else {
        fmt.Printf("都不对 \n", );
    }
}

switch…case…

switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough 。使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。

package main

import "fmt"

func main() {
    score := 85
    //条件型
    switch {
    case score >= 90:
        fmt.Println("级别: A")
    case score >= 80 && score < 90:
        fmt.Println("级别: B")
    case score >= 70 && score < 80:
        fmt.Println("级别: C")
    case score >= 60 && score < 70:
        fmt.Println("级别: D")
    default:
        fmt.Println("级别: F")
    }
    //等值
    switch score {
    case 80, 90:
        fmt.Println("值可能为80或者90")
    case 85:
        //执行下一条
        fallthrough
    case 50:
        fmt.Println("必须执行")
    default:
        fmt.Println("默认执行")
    }
}

注意:

  • 和条件语句一样,左花括号 { 必须与 switch 处于同一行;
  • 单个 case 中,可以出现多个结果选项(通过逗号分隔);
  • 与其它语言不同,Go 语言不需要用 break 来明确退出一个 case;
  • 只有在 case 中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个 case;
  • 可以不设定 switch 之后的条件表达式,在这种情况下,整个 switch 结构与多个 if…else… 的逻辑作用等同。

for循环

for 循环是一个循环控制结构,可以执行指定次数的循环。

    a := 0;
    for i := a; i <= 10; i++ {
        a += i
    }
    fmt.Printf("a : %d\n", a)

    sum := 1
    // sun小于等于10就累加,这样写也可以,更像 While 语句形式
    for sum <= 10 {
        sum += sum
    }
    fmt.Printf("sum : %d\n", sum)

    numbers := [6]int{1, 2, 3, 5}
    for i,x:= range numbers {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
    }
    //死循环
    /*for {
        sum++ // 无限循环下去
    }*/

注意:

  • 和条件语句、分支语句一样,左花括号 { 必须与 for 处于同一行;
  • 不支持 whie 和 do-while 结构的循环语句;
  • 可以通过 for-range 结构对可迭代集合进行遍历;
  • 支持基于条件判断进行循环迭代;
  • 与 PHP 一样,都允许在循环条件中定义和初始化变量,且支持多重赋值;
  • Go 语言的 for 循环同样支持 continue 和 break 来控制循环。

break 与 continue

和 PHP 一样,Go 语言支持在循环语句中通过 break 语句跳出循环,通过 continue 语句进入下一个循环。
Go 语言的 break 和 contine 与 PHP 的不同之处在于支持与标签结合跳转到指定的标签语句,从而改变这两个语句的默认跳转逻辑,标签语句通过标签+「:」进行声明:

func bcTest() {
    arr := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
ITERATOR1:
    for i := 0; i < 3; i++ {
        for j := 0; j < 3; j++ {
            num := arr[i][j]
            if j > 2 {
                break ITERATOR1
            }else if num == 2 {
                continue
            }
            fmt.Println(num)
        }
    }
}

goto

goto 语句的语义非常简单,就是跳转到本函数内的某个标签

arr := [][]int{{1,2,3},{4,5,6},{7,8,9}}

for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        num := arr[i][j]
        if j > 1 {
            goto EXIT
        }
        fmt.Println(num)
    }

EXIT:
fmt.Println("Exit.")