Go语言入门-流程控制语句

流程控制

Go语言中有以下几种常见的流程控制语句:

  1. 条件语句(Conditional Statements):

    • if语句:用于根据条件执行代码块。
    • else语句:在if条件不满足时执行的语句块。
    • else if语句:用于在多个条件之间进行判断。
    age := 20
    
    if age >= 18 {
        fmt.Println("成年人")
    } else {
        fmt.Println("未成年人")
    }
    
    score := 85
    if score >= 90 {
        fmt.Println("优秀")
    } else if score >= 80 {
        fmt.Println("良好")
    } else {
        fmt.Println("及格")
    }
    
  2. 循环语句(Loop Statements):

    • for循环:用于重复执行一段代码块,可以指定循环条件、初始语句和后续语句。
    • range循环:用于遍历数组、切片、字符串、映射等数据结构中的元素。
    // for循环
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }
    //for遍历string
    str := "hello,nihao"
    fmt.Println(str)
    fmt.Println("字符串str长度为:", len(str))
    for i := 0; i < len(str); i++ {
        //fmt.Printf("字节打印:", str[i]) //直接打印是字符的编码
        fmt.Printf("%c", str[i])
    }
    // range循环
    numbers := []int{1, 2, 3, 4, 5}
    for index, value := range numbers {
        fmt.Printf("索引:%d,值:%d\n", index, value)
    }
    //range遍历string
    for i, v := range str {
        fmt.Printf("索引位置:%d的值为:%c\n", i, v)//索引位置:0的值为:h
    }
    
  3. 选择语句(Selection Statements):

    • switch语句:根据表达式的值选择执行不同的分支。
    num := 2
    
    switch num {
    case 1:
        fmt.Println("选择了1")
    case 2:
        fmt.Println("选择了2")
    default:
        fmt.Println("未知选择")
    }
    
    fruit := "apple"
    switch fruit {
    case "apple", "pear":
        fmt.Println("选择了苹果或梨子")
    case "banana":
        fmt.Println("选择了香蕉")
    default:
        fmt.Println("未知选择")
    }
    
  4. 跳转语句(Jump Statements):

    • break语句:用于跳出当前循环或switch语句。
    • continue语句:用于跳过当前循环的剩余代码并开始下一次迭代。
    • goto语句:无条件地转移到指定标签的语句。
    for i := 1; i <= 5; i++ {
           if i == 3 {
              break // 当i等于3时跳出循环
           }
           fmt.Println(i) // 1 2
        }
    
        for i := 1; i <= 5; i++ {
           if i == 3 {
              continue // 当i等于3时跳过本次循环,继续下一次循环
           }
           fmt.Println(i) //1 2 4 5
        }
    
        i := 0
    Loop:
        for {
           i++
           if i == 3 {
              goto Loop // 跳转到Loop标签处继续执行循环
           } else if i == 5 {
              break Loop // 在第5次循环时跳出循环
           }
           fmt.Println(i)//1 2 4
        }
    

除了上述常见的流程控制语句,Go语言还提供了一些其他的关键字和语句来处理程序的流程控制,如:

  • fallthrough:在switch语句中,用于贯穿到下一个分支的代码块。

    默认情况下,当一个分支的条件满足时,switch语句会执行该分支并终止,不会继续执行其他分支。但是,如果在某个分支使用了fallthrough关键字,那么即使该分支的条件满足,程序也会继续执行下一个分支,无论下一个分支的条件是否满足。

    num := 2
    
    switch num {
    case 1:
        fmt.Println("数字是1")
    case 2:
        fmt.Println("数字是2")
        fallthrough
    case 3:
        fmt.Println("数字是3")
    default:
        fmt.Println("未知数字")
    }
    

    输出结果:

    数字是2
    数字是3
    
  • select:用于在多个通道操作中进行选择和执行。

    select语句用于在多个通道操作中进行选择和执行。它类似于switch语句,但是针对通道操作。select语句会监听多个通道的操作,一旦有某个通道操作可以进行,就会执行对应的代码块。

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	ch1 := make(chan string)
    	ch2 := make(chan string)
    
    	go func() {
    		time.Sleep(2 * time.Second)
    		ch1 <- "Hello from channel 1"
    	}()
    
    	go func() {
    		time.Sleep(1 * time.Second)
    		ch2 <- "Hello from channel 2"
    	}()
    
    	select {
    	case msg1 := <-ch1:
    		fmt.Println(msg1)
    	case msg2 := <-ch2:
    		fmt.Println(msg2)
    	}
    }
    

    输出结果:

    Hello from channel 2
    

    因为ch2通道的操作先准备好了,所以程序执行对应的代码块。

  • defer:用于延迟执行函数调用,通常用于释放资源或错误处理。

    defer用于延迟执行函数调用,通常用于释放资源或错误处理。被defer关键字修饰的函数调用会在包含它的函数执行完毕后才执行,即使函数发生了错误也会执行。

    示例代码:

    goCopy Codepackage main
    
    import "fmt"
    
    func main() {
    	defer fmt.Println("这行代码会最后执行")
    	fmt.Println("这行代码会第一个执行")
    }
    

    输出结果:

    这行代码会第一个执行
    这行代码会最后执行
    

    defer语句会将函数调用推迟到包含它的函数执行完毕后执行。

    defer还可以用于关闭文件、释放锁、清理资源等操作,确保在函数结束时这些操作一定会执行,不受返回或错误的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值