控制流语句


2022年1月12日, Learn eTutorial
1918

在“learn eTutorials”之前的Golang教程中,你学习了Go编程语言的基础知识。我们讨论了Golang的基础知识,例如数据类型、变量、常量,它们都是编写高效代码的一部分。在本教程中,你将了解如何使用控制流语句(如if/else、switch)和循环语句(如for、range等)在Golang程序中进行决策。此外,我们还将讨论决策语句的语法和流程图。

GO : Control-flow

Golang中的控制流语句是什么?

程序是一段代码,在执行时,控制流从一行代码顺序流向另一行代码。这是程序在未指定控制流时的正常执行情况。在特定程序中,会提到控制流,解释器会根据一些条件语句执行程序。因此,控制流可以定义为程序中代码行执行的顺序。Golang中的控制流语句进一步分为决策语句和循环语句。

在本教程的下一部分中,你将学习不同的决策语句,如只有if、if-else、else-if和嵌套if等……

GO : Control-flow

Go条件支持比较运算符和逻辑运算符。

比较运算符 符号   逻辑运算符 符号
小于   逻辑与  &&
小于或等于 <=   逻辑或  ||
大于   逻辑非  !
大于或等于 >=      
等于 ==      
不等于 !=      
小于      

Golang中的决策语句

  • 决策语句基于某些条件。因此它们被称为条件语句。
  • 如果程序中没有提供任何条件,则控制流按顺序进行。 
  • 如果在程序的任何代码块中提供了要满足的任何条件,则控制流会根据该代码块结果的评估而改变。 
  • 提供的满足条件会导致控制流的决策。Go决策语句返回true或false值。
     

Golang中的If语句

  •   If语句是一种决策语句,与任何其他编程语言相同,用于执行一些条件逻辑。
  •   语法:-
    
    If condition {
    //perform some instruction
    }
    
    
  •   如果条件设置为满足,即为true,则只执行大括号“{ }”中包含的指令。
  •   如果你熟悉C、C++语言,你会发现这里的区别在于条件不像其他语言那样放在括号内。
  •   在条件之后提供了开括号和闭括号,其中包含要执行的指令。
  •   if语句的流程图
    GO : Control-flow: IFStatement

使用if语句检查数字是否更大的程序。


package main
import ("fmt")

func main() {
  if 19 > 14 {
    fmt.Println("29 is greater than 14")
  }
}

输出


29 is greater than 14

另一个示例展示了if语句中的多个语句或条件。在给定示例中,a被赋值为45,使用&&(逻辑与)运算符与两个数字进行比较。


package main
import "fmt"

func main() {
    a := 45
    // mutiple conditions in if statement
    if a > 14 && a < 49 {
        fmt.Println("a satisfies the multiple if condition return true")
    }
}

输出


a satisfies the multiple if condition return true

if-else语句

  •   if-else是另一种决策语句。
  •   如果条件为真或满足,则执行条件后大括号内的指令块
  •   如果条件不满足,则执行else中的指令块 
    
    if condition {
    //do some instructions
    }else {
    //do some instructions
    
    

    注意:如果else关键字不在前一个块的右大括号后的同一行,则会显示编译器错误。

if-else语句的流程图

GO : Control-flow

让我们通过一个使用比较运算符的简单示例来理解if-else。


package main
import "fmt"

func main() {
    NUM1 := 15
    NUM2:= 27

    if NUM1 > NUM2 {
        fmt.Println(" NUM1 is greater than NUM2")
    } else {
        fmt.Println("NUM2 is greater than NUM1")
    }
}

输出


NUM2 is greater than NUM1e

if-else if语句

  •   也称为if-else阶梯语句。
  •   可以在if和else条件之间包含多个else if语句。
  •   else-if和else应紧跟右大括号或前一个块。

  if-else if阶梯的语法如下所示


If condition1 {
//do some instructions
}else if condition2 {
//do some instructions
}else {
do some instructions
}

下面是一个使用if-else if阶梯的示例,它根据产品成本将其归类为“低成本”、“可行”或“昂贵”。


package main

import "fmt"

func main() {
    cost := 1000
    if cost < 250{
        fmt.Println("low cost")
    } else if cost>= 250 && cost < 400 {
        fmt.Println("feasible")
    } else {
        fmt.Println("Expensive")
    }
}

输出


Expensive

  if-else if阶梯语句的流程图

GO : Control-flow

嵌套if语句

   包含在大括号内的另一个if语句的if语句构成了嵌套if语句。


if condition1 {
   // instruction gets executed if condition1 is satisfied
if condition2{ 
 // instruction gets executed if both condition1 and condition2 are satisfied
}
}else {
 //some other instructions
}

嵌套if的流程图

GO : Control-flow

package main
import ("fmt")

func main() {
num1 := 35
if num1 >= 35 {
fmt.Println("Num1 >= 35.")
if num1 > 25 {
fmt.Println("Num1 > 25.")
}
} else {
fmt.Println("Num1 < 35.")
}
}

输出


Num1 >= 35.
Num1 > 25.

带语句简写声明的if

可以在if条件之前使用简写符号声明语句,如下面的语法所示。语句后跟要满足的条件,该条件进一步包含要执行的指令。如果条件为真,则在花括号内给出要执行的指令。

语法


If statement;condition {

}

让我们通过一个例子来理解


package main

import "fmt"

func main() {
    if j := 6; j > 5 {
        fmt.Println("j > 5")
    }
}

输出


j > 5

注意:不能在语句中使用var关键字代替简写符号。

Golang中的Switch语句

Golang支持switch语句,与任何其他编程语言一样。switch语句相对于其他控制语句(链接到控制语句)的优势是防止程序中出现多个if语句。
让我们从Golang中的基本switch语句开始

语法


switch statement; expression {
case expression1:
     //Do some instructions
case expression2:
     // Do some instructions
default:
     // Do some instructions
}

Golang中的switch如何工作?

上述语法中的switch关键字定义了该语句遵循一个switch条件。switch关键字后跟一个switch表达式。switch表达式需要通过与大括号内提供的不同对应case进行匹配来评估。该语法还可以用下面给出的其他形式表示。在上述语法中,switch语句和表达式写在同一行,这是可选的。它们也可以根据程序员的意愿单独声明。
让我们看看另一个switch语法


//SYNTAX 1
Switch statement ;{   // only with switch statement
case 1:
case 2:
default:
}


//SYNTAX 2
Switch  expression    // only with switch expression
case 1:
case 2:
default:
}


//SYNTAX 3
Switch {    // only with switch keyword
case 1: 
case 2:
default:
}

  •   语法1只包含switch语句,请注意分号放在语句之后。
  • 紧接着语句。
  •   语法2只包含switch表达式。
  •   语法3是一个简单的switch语法,后跟要评估的case。如果没有一个case验证为真,则切换到default关键字。然后将执行default关键字下定义的指令。
GO : Control-flow

让我们通过示例理解一个基本的switch


package main
import ("fmt")

func main() {
  months := 4

  switch months {
  case 1:
    fmt.Println("january")
  case 2:
    fmt.Println("february")
  case 3:
    fmt.Println("march")
  case 4:
    fmt.Println("april")
  case 5:
    fmt.Println("may")
  case 6:
    fmt.Println("june")
  case 7:
    fmt.Println("july")
  }
}

输出


april

在前面的示例中,switch表达式评估case 4,因为months(switch表达式)初始化为4。因此,在与case 4匹配之前,它会与其他case进行比较。如果没有找到匹配的case,它会切换到默认类型。
让我们讨论下面的示例,了解在切换时如何使用默认类型。
检查switch中默认类型工作的程序


package main
import ("fmt")

func main() {
  months := 12//switch expression to evaluate

  switch months {
  case 1:
    fmt.Println("january")
  case 2:
    fmt.Println("february")
  case 3:
    fmt.Println("march")
  case 4:
    fmt.Println("april")
  case 5:
    fmt.Println("may")
  case 6:
    fmt.Println("june")
  case 7:
    fmt.Println("july")
  default:
  fmt.Println("no months defined") 
 }
}

输出


no months defined

在上面的示例中,months: = 12未被评估,未找到与给定任何case的匹配,因此打印默认语句。

switch语句和switch表达式在同一行中的程序


package main
import ("fmt")

func main() {

  switch months := 6;months {
  case 1:
    fmt.Println("january")
  case 2:
    fmt.Println("february")
  case 3:
    fmt.Println("march")
  case 4:
    fmt.Println("april")
  case 5:
    fmt.Println("may")
  case 6:
    fmt.Println("june")
  case 7:
    fmt.Println("july")
  default:
  fmt.Println("no months defined")
  
  }
}

输出


june

switch语句中不同case可以有多个值。switch case提供了多个值,用于评估给定的语句。
让我们通过一个例子来理解


package main
import ("fmt")

func main() {
 // multiple switch cases
  switch months := 7;months {
  case 1,2,3:
    fmt.Println("holiday")
  case 4,5:
    fmt.Println("working day")
  case 6,7,8:
    fmt.Println("weekend")
  
  default:
  fmt.Println("invalid case")
  
  }
}

输出


weekend

到目前为止,我们讨论了不同的控制流语句,在下一个教程中,你将学习如何在Golang中实现循环。