「每周译Go」如何在 Go 中编写条件语句

admin 2023年1月17日14:42:06评论21 views字数 6459阅读21分31秒阅读模式

目录

  1. 在 Go 中导入包
  2. 理解 Go 中包的可见性
  3. 如何在 Go 中编写条件语句
  4. 如何在 Go 中编写 Switch 语句
  5. 如何在 Go 中构造 for 循环
  6. 在循环中使用 Break 和 Continue
  7. 如何在 Go 中定义并调用函数
  8. 如何在 Go 中使用可变参数函数
  9. 了解 Go 中的 defer
  10. 了解 Go 中的 init
  11. 用构建标签定制 Go 二进制文件
  12. 了解 Go 中的指针
  13. 在 Go 中定义结构体
  14. 在 Go 中定义方法
  15. 如何构建和安装 Go 程序
  16. 如何在 Go 中使用结构体标签
  17. 如何在 Go 使用 interface
  18. 在不同的操作系统和架构编译 Go 应用
  19. 用 ldflags 设置 Go 应用程序的版本信息
  20. 在 Go 里面如何使用 Flag 包


介绍

条件性语句是每一种编程语言的组成部分。通过条件语句,我们可以让代码有时运行,有时不运行,这取决于当时程序的条件。

当我们完全执行程序的每个语句时,我们并没有要求程序评估特定的条件。通过使用条件语句,程序可以确定某些条件是否被满足,然后被告知下一步该做什么。

让我们来看看一些使用条件语句的例子。

  • 如果学生的考试成绩超过65%,报告她的成绩通过;如果没有,报告她的成绩不合格。
  • 如果他的账户里有钱,就计算利息;如果没有,就收取罚款。
  • 如果他们买了10个或更多的橙子,计算5%的折扣;如果他们买的少,就不买。

通过评估条件,并根据是否满足这些条件来分配代码运行,我们就是在写条件代码。

本教程将带你了解在 Go 编程语言中编写条件语句。

If 语句

我们将从 if 语句开始,它将评估一个语句是真的还是假的,并且只在该语句为真的情况下运行代码。

在一个纯文本编辑器中,打开一个文件,写入以下代码:

package main

import "fmt"

func main() {
 grade := 70

 if grade >= 65 {
  fmt.Println("Passing grade")
 }
}

在这段代码中,我们有一个变量grade,并给它一个整数值70。然后我们使用if语句来评估变量grade是否大于或等于(>=65。如果它确实满足这个条件,我们告诉程序打印出字符串(点击查看往期推文) Passing grade

将程序保存为grade.go,并在终端窗口(点击查看往期推文) go run grade.go命令运行它。

在这种情况下,70分的成绩*符合大于或等于65分的条件,因此,一旦你运行该程序,你将收到以下输出:

Passing grade

现在让我们改变这个程序的结果,把grade变量的值改为60

package main

import "fmt"

func main() {
 grade := 60

 if grade >= 65 {
  fmt.Println("Passing grade")
 }
}

当我们保存并运行这个代码时,我们不会收到任何输出,因为条件*没有得到满足,我们也没有告诉程序执行另一条语句。

再举一个例子,让我们计算一个银行账户余额是否低于0。让我们创建一个名为account.go的文件,并编写以下程序:

package main

import "fmt"

func main() {
 balance := -5

 if balance < 0 {
  fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
 }
}

当我们用go run account.go运行该程序时,我们会收到以下输出:

Balance is below 0, add funds now or you will be charged a penalty.

在程序中,我们将变量balance初始化为5,即小于0。由于balance符合if语句的条件(balance<0),一旦我们保存并运行代码,我们将收到字符串的输出。同样,如果我们把余额改为0或一个正数,我们将不会收到任何输出。

Else 语句

我们很可能希望程序在 if语句评估为假时也能有所作为。在我们的成绩例子中,我们希望输出成绩是合格还是不合格。

要做到这一点,我们将在上面的成绩条件中添加一个 else 语句,其结构如下:

package main

import "fmt"

func main() {
 grade := 60

 if grade >= 65 {
  fmt.Println("Passing grade")
 } else {
  fmt.Println("Failing grade")
 }
}

由于成绩变量的值是60if语句评估为假,所以程序不会打印出Passing grade。接下来的 else 语句告诉程序无论如何都要做一些事情。

当我们保存并运行该程序时,我们将收到以下输出:

Failing grade

如果我们重写程序,给成绩一个65或更高的值,我们将收到Passing grade的输出。

为了给银行账户的例子增加一个 else 语句,我们这样改写代码:

package main

import "fmt"

func main() {
 balance := 522

 if balance < 0 {
  fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
 } else {
  fmt.Println("Your balance is 0 or above.")
 }
}
Your balance is 0 or above.

在这里,我们把balance变量的值改为正数,这样else语句就会打印出来。为了让第一个if语句打印出来,我们可以把这个值改写成一个负数。

通过将if语句和else语句结合起来,你就构建了一个由两部分组成的条件语句,无论if条件是否满足,都会告诉计算机执行某些代码。

Else if 语句

到目前为止,我们已经为条件语句提出了一个布尔(点击查看往期推文) 选项,每个if语句的评估结果为真或假。在许多情况下,我们会希望一个程序能评估出两个以上的可能结果。为此,我们将使用else if语句,在 Go 中写成else ifelse if或 else if 语句看起来和if语句一样,将评估另一个条件。

在银行账户程序中,我们可能希望在三种不同的情况下有三个离散的输出。

  • 余额低于0
  • 余额等于0
  • 余额高于0

else if语句将被放在 if 语句和 else 语句之间,如下所示:

package main

import "fmt"

func main() {
 balance := 522

 if balance < 0 {
  fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
 } else if balance == 0 {
  fmt.Println("Balance is equal to 0, add funds soon.")
 } else {
  fmt.Println("Your balance is 0 or above.")
 }
}

现在,一旦我们运行该程序,有三种可能的输出:

  • 如果变量余额等于0,我们将收到else if语句的输出(`余额等于0,尽快添加资金。)
  • 如果变量balance被设置为一个正数,我们将收到else语句的输出(你的余额为0或以上)。
  • 如果变量balance被设置为一个负数,输出将是if语句的字符串(余额低于0,现在添加资金,否则将被收取罚款)。

如果我们想有三个以上的可能性呢?我们可以通过在代码中写一个以上的else if语句来实现。

grade.go程序中,让我们重写代码,以便有几个字母等级对应于数字等级的范围。

  • 90分或以上相当于A级
  • 80-89相当于B级
  • 70-79相当于C级
  • 65-69相当于D级
  • 64分或以下相当于F级

要运行这段代码,我们将需要一个if语句,三个else if语句,以及一个处理所有失败情况的else语句。

让我们重写前面的例子中的代码,让字符串打印出每个字母等级。我们可以保持我们的else语句不变。

package main

import "fmt"

func main() {
 grade := 60

 if grade >= 90 {
  fmt.Println("A grade")
 } else if grade >= 80 {
  fmt.Println("B grade")
 } else if grade >= 70 {
  fmt.Println("C grade")
 } else if grade >= 65 {
  fmt.Println("D grade")
 } else {
  fmt.Println("Failing grade")
 }
}

由于else if语句将按顺序评估,我们可以保持我们的语句相当基本。这个程序正在完成以下步骤。

  1. 如果成绩大于90,程序将打印 "A 级",如果成绩小于90,程序将继续下一个语句...。
  2. 如果成绩大于或等于80,程序将打印 "B 级",如果成绩在79或以下,程序将继续下一个语句......
  3. 如果成绩大于或等于70,程序将打印 "C 级",如果成绩是69或更少,程序将继续下一个语句......
  4. 如果成绩大于或等于65,程序将打印 "D 级",如果成绩是64或更少,程序将继续下一个语句......
  5. 程序将打印 "成绩不合格",因为上述所有的条件都没有满足。

嵌套的If语句

一旦你对 if, else if, 和 else语句感到满意,你就可以转到嵌套条件语句。我们可以使用嵌套的if语句来处理这样的情况:如果第一个条件执行为真,我们想检查第二个条件。为此,我们可以在另一个 if-else 语句中设置一个 if-else 语句。让我们来看看嵌套的if语句的语法。

if statement1 { // outer if statement
 fmt.Println("true")

 if nested_statement { // nested if statement
  fmt.Println("yes")
 } else { // nested else statement
  fmt.Println("no")
 }

else { // outer else statement
 fmt.Println("false")
}

这段代码可以产生一些可能的输出。

  • 如果statement1评估为真,程序将评估nested_statement是否也评估为真。如果这两种情况都是真的,那么输出将是:
true
yes
  • 然而,如果statement1评估为真,但nested_statement评估为假,那么输出将是:
true
no
  • 而如果statement1评估为 false,嵌套的 if-else 语句将不会运行,所以else语句将单独运行,输出结果为:
false

我们也可以在代码中嵌套多个if语句:

if statement1 { // outer if
 fmt.Println("hello world")

 if nested_statement1 { // first nested if
  fmt.Println("yes")

 } else if nested_statement2 { // first nested else if
  fmt.Println("maybe")

 } else { // first nested else
  fmt.Println("no")
 }

else if statement2 { // outer else if
 fmt.Println("hello galaxy")

 if nested_statement3 { // second nested if
  fmt.Println("yes")
 } else if nested_statement4 { // second nested else if
  fmt.Println("maybe")
 } else { // second nested else
  fmt.Println("no")
 }

else { // outer else
 statement("hello universe")
}

在这段代码中,除了 else if 语句外,每个 if 语句内都有一个嵌套的 if 语句。这将使每个条件内有更多的选项。

让我们用grade.go程序来看一个嵌套if语句的例子。可以首先检查一个成绩是否合格(大于或等于65%),然后评估数字成绩应该相当于哪个字母等级。如果成绩不合格,我们就不需要运行字母等级,而可以让程序报告该成绩不合格。修改后的代码和嵌套的 if 语句看起来是这样的:

package main

import "fmt"

func main() {
 grade := 92
 if grade >= 65 {
  fmt.Print("Passing grade of: ")

  if grade >= 90 {
   fmt.Println("A")

  } else if grade >= 80 {
   fmt.Println("B")

  } else if grade >= 70 {
   fmt.Println("C")

  } else if grade >= 65 {
   fmt.Println("D")
  }

 } else {
  fmt.Println("Failing grade")
 }
}

如果我们在运行代码时将变量grade设置为整数值92,那么第一个条件就得到了满足,程序将打印出Passing grade of:。接下来,它将检查成绩是否大于或等于90,由于这个条件也被满足,它将打印出A

如果我们在运行代码时将grade变量设置为60,那么第一个条件就没有得到满足,所以程序将跳过嵌套的if语句,向下移动到else语句,程序将打印出Failing grade

当然,我们可以在此基础上增加更多的选项,并使用第二层嵌套的if语句。也许我们想对A+、A和A-的成绩分别进行评估。我们可以这样做,首先检查成绩是否合格,然后检查成绩是否在90分或以上,然后检查成绩是否在96分以上为A+:

...
if grade >= 65 {
 fmt.Print("Passing grade of: ")

 if grade >= 90 {
  if grade > 96 {
   fmt.Println("A+")

  } else if grade > 93 && grade <= 96 {
   fmt.Println("A")

  } else {
   fmt.Println("A-")
  }
...

在这段代码中,对于设置为96的 grade 变量,程序将运行以下程序。

  1. 检查该等级是否大于或等于65(真)。
  2. 打印出 Passing grade of:
  3. 检查成绩是否大于或等于90(真)。
  4. 检查成绩是否大于96(假)。
  5. 检查等级是否大于93,同时小于或等于96(真)。
  6. 打印 "A"。
  7. 离开这些嵌套的条件语句,继续执行剩余的代码

因此,成绩为96的程序的输出看起来是这样的:

Passing grade of: A

嵌套的if语句可以提供机会,在你的代码中添加几个特定级别的条件。

总结

通过使用像 if 语句这样的条件语句,你将对你的程序执行内容有更大的控制。条件性语句告诉程序要评估是否满足某个条件。如果满足条件,它将执行特定的代码,但如果不满足条件,程序将继续执行其他代码。

要继续练习条件语句,请尝试使用不同的运算符(点击查看往期推文)来获得对条件语句的更多熟悉。


往期推荐



「每周译Go」如何在 Go 中编写条件语句

零拷贝技术第二篇:Go语言中的应用

「每周译Go」如何在 Go 中编写条件语句

零拷贝技术第一篇:综述


2022 GopherChina大会紧急通知!

想要了解Go更多内容,欢迎扫描下方👇关注公众号,回复关键词 [实战群]  ,就有机会进群和我们进行交流

「每周译Go」如何在 Go 中编写条件语句

分享、在看与点赞Go 「每周译Go」如何在 Go 中编写条件语句

原文始发于微信公众号(GoCN):「每周译Go」如何在 Go 中编写条件语句

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月17日14:42:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   「每周译Go」如何在 Go 中编写条件语句https://cn-sec.com/archives/1429330.html

发表评论

匿名网友 填写信息