【Go 语言教程】Go 语言条件和循环语句

在学习计算机编程的时候我们知道(没系统学过的)也知道关于计算机的指令系统是0和1构成,同时计算机只识别0和1的串,最后计算机可以执行的就是0和1串组成的机器代码。我们称之为计算机的逻辑判断,也可以称之为true或者false(加入1代表true,0代表false),和有趣的非对即错的现象非常类似。当然世界一定不是只有2个状态,非true就是false,还会有第三种状态,当然这个时候咱们谈论的就是不是条件判断了。
所以一定是条件判断就是非true即false的,不同情况下代表不同的执行路径和不同的处理方式,计算机需要明确的指令。同时也同时存在一种情况或者场景是这样的,就是”计算机需要连续的执行某一系列的指令,当存在某些条件的时候需要退出执行或者继续执行等等“,就如同走路一般,左右的路,也有需要一直转圈的路。
那么对于Go语言的条件和循环逻辑的都包含有什么内容呢,让我们一起看一下,首先对于条件语句和循环逻辑的定义如下:

  • 条件语句,是用来判断给定的条件是否满足(表达式值是否为0或者false),并根据判断的结果(true或者false)决定执行的语句,选择的结构和流程就是使用条件语句来实现的。
  • 循环语句,则是指具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,其中能否继续重复,决定循环的终止条件。
    那么接下来我们就看下条件和循环的细节。

1 Go 条件判断语句

1.1 判断的形式和说明

  • if语句 if语句 由一个布尔(bool)表达式后紧跟一个或者多个语句组成
  • if … else 语句 if语句后面可以跟else语句,else语句中的表达式是在布尔(bool)表达式为false时候进行执行
  • switch语句 switch语句主要用于基于不同条件的路径动作和执行
  • select语句 select语句类似于switch语句,但是select会随机执行一个可运行的case,如果没有case可以执行,则会阻塞,知道有case执行位置。
  • switch不会有阻塞的特性。

1.2 条件判断的例子代码

package main  
import "fmt"
func main() {
        // run ifelse
        ifelse_func()
        // run switch 
        switch_func()
        // run select 
        select_func()
}
func ifelse_func() {
        flag := false 
        if !flag { // 条件值为true 
                fmt.Println("this is ", flag, "loop")
        } else { // 条件值为false 
                fmt.Println("this is ", !flag, "loop")
        }
}
func switch_func() {
        tag := 3
        switch tag {
                case 1:
                        fmt.Println("current tag is : ", tag)
                case 2:
                        fmt.Println("current tag is : ", tag)
                case 3:
                        fmt.Println("current tag is : ", tag)
                case 4:
                        fmt.Println("current tag is : ", tag)
        }
}
func select_func() {
        var sigchan1, sigchan2 chan int
        var s1, s2 int
        select {
                case s1 = <- sigchan1:
                        fmt.Println("receive ", s1, " from sigchan 1")
                case sigchan2 <- s2:
                        fmt.Println("send ", s2, " to sigchan2")
                default:
                         fmt.Println("no signal")
        } 
}

2 Go 循环语句

2.1 循环类型

循环语句主要在计算机中让计算机重复的执行一系列的指令,在业务层级来说就是循环的做一件事情。循环类型分为普通的循环和嵌套循环,即常见的for循环,以及for循环里面嵌套for循环。即:

  • for循环:重复执行语句块
  • 嵌套循环:在for循环内部还有for循环

2.2 循环语句

循环语句控制可以对内部的执行过程进行控制,让执行的loop按照自己希望的方式进行执行。Go 语言支持的循环控制语句有:break语句,用于终端当前for循环或者跳出switch语句;
continue语句,用于调过当前循环的剩余语句,然后从头开始继续往下执行循环;goto语句,将控制转移跳转到被标记的语句,任意跳转。
循环中其中有一种叫做无限循环,就是循环不会退出,这种类型的循环多用于一个routine中,或者main主函数中用于主程序的daemon运行。用于做到业务要求的24小时不停止服务请求的业务逻辑。

2.3 循环例子代码

普通循环和控制

package main

import (
        "fmt"
)

func main() {
        num := 5
        for num < 20 {
                fmt.Println("num is ", num);
                if num <= 10 {
                        num++
                        fmt.Println("num is less than 10")
                        continue
                }
                if num > 10 {
                        fmt.Println("num is larger than 10")
                        break;
                }
        }
}

无限循环例子

package main

import ( 
    "fmt" 
    "os" 
    "os/signal" 
    "time" 
)

func main() { 
    go sig_listen() 
    time.Sleep(time.Hour) 
}

func sig_listen() { 
    sig_chan := make(chan os.Signal) 
    signal.Notify(sig_chan) 
    // get a signal then exit 
    for { 
        signal := <- sig_chan 
        fmt.Println("Get a Sig:", signal) 
                os.Exit(0)
    } 
}

3 经验总结和分享

作为程序的逻辑和业务流程,循环是一个程序的控制器,有了循环才让这个程序有了更多的想象空间,比如做一个互联网产品服务,24小时提供不间断服务,那么就需要无限循环。而对于Go语言,无限循环多用于main主线程的loop逻辑确保程序的24小时不间断运行。同时也会结合Go 的routine的方式进行job的执行调度,在routine的循环中不退出,可以做到不停的处理任务的作用,在进行类型worker的设计模式实践过程中,循环也是一个常见的编码方式和设计模式。

关于本专栏——Go 语言教程,专栏致力于为希望可以系统地,一条一条地,一步一步的学习Go语言的朋友提供一个可以持续阅读的地方,当然也希望可以通过我的实践经验以及相应的基础,可以给你一些学习之外的想法和总结,以及提高。如果真的有帮助,哪怕一点点,可以把这个一点点的提高分享给我,欢迎跟我勾搭联系。

    原文作者:万能的华哥Dean
    原文地址: https://www.jianshu.com/p/ade1ff70b908
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞