Go编程语言-流程控制

161 阅读3分钟

1、条件语句

if-else条件语句

  • if - else
  • if - else if - else

注意:

  • Go语言是强类型语言,因此条件表达式的值只能是布尔类型
  • Go编译器,对于 {} 的位置有严格的要求,它要求 else if (或 else)和 两边的花括号,必须在同一行。
  • if 里可以允许先运行一个表达式,取得变量后,再对其进行判断
import "fmt"

func main() {
    score := 80
    //普通写法
    if score > 90 {
        fmt.Println("成绩为A")
    } else if score >75 {
        fmt.Println("成绩为B")
    } else if score >60 {
        fmt.Println("成绩为C")
    } else {
        fmt.Println("成绩不及格")
    }
    //多个表达式写法
     if num := 100;num % 2 == 0 {
        fmt.Println("偶数")
    }
}

switch-case条件语句

注意:

  • switch-case-default中,执行完相应case后会自动跳出,如果没有相应case可以处理,则执行default语句
  • 一个case可以合并多个条件
  • switch后面可接变量、表达式、函数
  • switch后面可以不加变量或表达式或函数,相当于if - else if - else
  • 当 case 使用关键字 fallthrough 开启穿透能力,可以直接执行下一个case的语句
  • fallthrough到下一个case块时,不执行case匹配检查!
import "fmt"
func main() {
	//示例1
    education := "本科"
    switch education {
    case "博士":
        fmt.Println("我是博士")
    case "研究生":
        fmt.Println("我是研究生")
    case "本科":
        fmt.Println("我是本科生")
    case "大专":
        fmt.Println("我是大专生")
    case "高中":
        fmt.Println("我是高中生")
    default:
        fmt.Println("高中以下学历~")
    }
    
    //示例2
    month := 2
    switch month {
    case 3, 4, 5:
        fmt.Println("春天")
    case 6, 7, 8:
        fmt.Println("夏天")
    case 9, 10, 11:
        fmt.Println("秋天")
    case 12, 1, 2:
        fmt.Println("冬天")
    default:
        fmt.Println("输入有误...")
    }
    
    //示例3
    chinese := 80
    english := 50
    math := 100
    switch getResult(chinese, english, math) {
    case true:
        fmt.Println("该同学所有成绩都合格")
    case false:
        fmt.Println("该同学有挂科记录")
    }
    
    //示例4
    //该段执行结果是输出 hello和xxxx
    s := "hello"
    switch {
    case s == "hello":
        fmt.Println("hello")
        fallthrough
    case s == "xxxx":
        fmt.Println("xxxx")
    case s != "world":
        fmt.Println("world")
    }
    
}
// 判断一个同学是否有挂科记录的函数
// 返回值是布尔类型
func getResult(args ...int) bool {
    for _, i := range args {
        if i < 60 {
            return false
        }
    }
    return true
}

2、循环语句

for语句

  • Go中,循环语句只有for,没有while,但是for可以实现while的功能
  • for 后面,可以接四种类型的表达式。
    • 接一个条件表达式
    • 接三个表达
    • 接一个 range 表达式
    • 不接表达式
import "fmt"

func main() {
    //示例1
    num := 1
    for num <= 5 {
    	fmt.Println(num)
        num++
    }
    
    //示例2
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }
    
    //示例3,for range用于遍历可迭代对象,如数组、切片、字符串等
    myarr := [...]string{"world", "python", "go"}
    for _, item := range myarr {
        fmt.Printf("hello, %s\n", item)
    }
    
    //示例4
    var i int = 1
    for {
        if i > 5 {
            break
        }
        fmt.Printf("hello, %d\n", i)
        i++
    }
}

3、跳转语句

goto语句

  • go语言中,利用goto实现无条件跳转语句
  • goto语句与标签之间不能有变量声明,否则编译错误
import "fmt"

func main() {
    //示例1:使用方法
    goto flag
    fmt.Println("hello")
flag:
    fmt.Println("world")

    //示例2:实现for功能
     i := 1
flag:
    if i <= 5 {
        fmt.Println(i)
        i++
        goto flag
    }
    
    //示例3:实现break功能
     i = 1
    for {
        if i > 5 {
            goto flag
        }
        fmt.Println(i)
        i++
    }
flag:
    
    //示例4:实现continue功能
    i = 1
flag:
    for i <= 10 {
        if i%2 == 1 {
            i++
            goto flag
        }
        fmt.Println(i)
        i++
    }
}

break语句

  • break语句可以用于跳出当前循环或者跳出对应标签所在的循环
package main

import (
    "fmt"
)

func main() {
    //示例1:跳出当前循环
    for i := 0; i < 10; i++ {
        if i > 5 {
            break       //终止这个循环,只打印0到5
        }
        fmt.Println(i)
    }
    
    //示例2:跳出到标签所在的循环
    J:
    for j := 0; j < 5; j++ {
        for i := 0; i < 10; i++ {
            if i > 6 {
                break J //现在终止的是j 循环,而不是i的那个
            }
            fmt.Println(i)
        }
    }
}

continue语句

package main

import (
    "fmt"
)

func main() {

    for i := 1; i <= 10; i++ {
        if i < 6 {
            continue     //如果i<6,忽略本次循环,继续下一次迭代
        }
        fmt.Println(i)
    }
}

4、延迟语句

defer延迟语句

  • defer关键字是go语言独有的关键字
  • defer语句可以延迟到所在函数执行完后再执行
  • defer语句在return之后调用
  • defer可以给程序做一个快照
  • 多个defer执行时,是逆序执行的
import "fmt"

func main() {   
    //示例1
    //该实例的输出结果是:
    //java
    //python
    //go
    name := "go"
    defer fmt.Println(name) // 输出: go

    name = "python"
    defer fmt.Println(name) // 输出: python

    name = "java"
    fmt.Println(name) //输出:java
}

验证defer在return之后执行

import "fmt"

var name string = "go"

func myfunc() string {
    defer func() {
        name = "python"
    }()

    fmt.Printf("myfunc 函数里的name:%s\n", name)
    return name
}

func main() {
    myname := myfunc()
    fmt.Printf("main 函数里的name: %s\n", name)
    fmt.Println("main 函数里的myname: ", myname)
}

参考

golang.iswbm.com/en/latest/c…