1.1、Go快速入坟系列之循环与分支

眨眼2020就过了,回想2020年实在太难了...希望2021年可以顺顺利利。祝大家新年快乐,牛气冲天!

分支


分支就是我们常见的if else条件判断,要认识分支,首先我们先得了解下基本类型——Boolean类型

Bool类型只有两个常量值:true(真)和false(假)

分支表示的就是当某个条件成立的时候,执行某片代码段。

像python和Js中,会把空字符串""认为是false,非空字符串为true,但是在Go中却只认为当表达式结果为truefalse的时候条件才会成立(所谓表达式可以认为是一系列的计算式)。

下面介绍一些常用的表达式输出结果为bool类型语句:

  • strings包下的 strings.Contanins方法:判断一个字符串是否包含所给字符串片段

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main() {
    	var str = "hello jochen"
    
    	if strings.Contains(str, "jochen") {
    		fmt.Println("如果字符串中包含jochen,则输出这段话")
    	}
    
    }
    // 输出了if代码段{}中的内容
    
  • 比较两个值。例如> < == !=(其中==表示等于、!=表示不等于)这些比较运算符,与变量、表面值等组成的表达式语句的结果也是bool类型的值

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var height = 179
    
    	if height < 180 {
    		fmt.Println("你没有180")
    	} else if height > 210{
    		fmt.Println("你是巨人吗?”)
        } else{
            fmt.Println("180大帅哥")
            
        }
    
    }
    // 输出 : 你没有180
    
  • 逻辑运算符组成的表达式,像是||(或),&&(与)、!(取反,及true变为false,false变为true)与变量、表面值组成的表达式其结果也为bool类型,它们通常用来同时检查多个bool表达式
    ps:程序中的逻辑表达式具有短路逻辑,意思是当一个逻辑或(||)bool表达式为true后,其后面的逻辑表达式都不会去判断,而逻辑与(&&)正好相反

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var height = 179
    	var age = 30
    	if height > 180 && age < 30 {
    		fmt.Println("有一米八,同时年纪小于30岁,是年轻帅小伙")
    	} else if height < 180 || age >= 30 {
    		fmt.Println("肯定没有一米八或大于三十岁")
    	}
    
    }
    // 输出 : 肯定没有一米八或大于三十岁
    

上面介绍的两个代码片段我们可以看到分支语句,if else的使用,它可以让程序在不同的条件执行相应的代码片段。当代码有多个分支条件的时候:
我们可以在第一个分支使用if bool表达式,其后的分支使用else if bool表达式。我们还可以使用else语句(它表示的是,当上面所有的分支条件都不符合的时候,走该代码片段),这样我们就可以可预知的设计我们的程序在不同的条件下执行不一样的行为动作
PS:需要注意的在go中:if后面如果跟有其他的分支如else ifelse等关键字,必要得紧跟在上一个分支的右大括号后面},不能换行写!这是go的语法规则!

package main

import (
	"fmt"
)

func main() {
	var height = 179

	if height < 180 {
		fmt.Println("你没有180")
	} 
	else if height >= 180 {    // 必须紧跟if代码段后面 这里会报错
		fmt.Println("180大帅哥")
	}  
}

分支语句除了可以使用if else还可以使用switch语句,一段代码简单学习下,因为这种方式我不是很喜欢用

package main

import (
	"fmt"
)

func main() {
	var height = 179

	switch height {
	case 180:
		fmt.Println("有一米八,同时年纪小于30岁,是年轻帅小伙")
	case 179:
		fmt.Println("没有一米八")
		fallthrough  // 执行万后会继续执行下一个case的代码片段
	case 178:
		fmt.Println("没有一米八")
		fallthrough
	case 177:
		fmt.Println("没有一米八")
	}
}

// 输出三个 :没有一米

case就相当于等于号,表示当匹配时执行其冒号:下的代码段

go语言中switch中有一个特色关键字fallthrough,它表示的是执行下一个case的代码段,即使该代码段不符合条件。
这与别的语言不太一样,在c#等其他语言中,switch满足条件后执行代码片段是以遇到break关键字为,也就是说如果没有break关键字代码会执行其下面的case下的代码段直到遇到break或是switch语句结束为止
而这一过程在go语言是相反的,代码符合条件后只会执行case下匹配的代码段,如果想继续往下执行case下面的case代码段则需要使用fallthrough关键字

循环


循环就是在满足某个条件下,重复的执行某一个代码片段,有了上述学习常用条件表达式的基础。对于"满足某个条件这句话"小伙伴们应该有了一些理解

go中使用for关键字使得代码重复执行

for后面可以跟条件,如果没有条件,则表示死循环(可以在代码中使用break跳出循环)

比较简单,直接看代码理解即可:

image-20210102030319377
上图的写法实际上就是我们在其他语言中使用的 while循环,那么别的语言的for循环结构(条件变量声明、循环条件、变化量)在go中如何使用呢?

写法和其他语言的模样相差无几,go在循环语句中使用for关键字统一了其他语言中的两种循环结构:

package main

import (
	"fmt"
)

func main() {

	for count := 0; count < 10; count++ {
		if count > 5 {
			break // 外层判断是十次结束循环,但这里让它五次就结束循环了
		}
		fmt.Printf("计数器count=%v, 小于10
", count)

	}

}

上图的count :=0是变量声明的另一种形式,名为短声明,下章节中会具体说到其作用。

原文地址:https://www.cnblogs.com/deehuang/p/14221502.html