如何在Go中编写条件语句

来自菜鸟教程
跳转至:导航、​搜索

介绍

条件语句是每种编程语言的一部分。 使用条件语句,我们可以让代码有时运行,有时不运行,具体取决于当时程序的条件。

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

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

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

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

本教程将带您完成使用 Go 编程语言编写条件语句。

如果语句

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

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

等级.go

package main

import "fmt"

func main() {
    grade := 70

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

使用此代码,我们有变量 grade 并给它 70 的整数值。 然后我们使用 if 语句来评估变量等级是否大于或等于 ( >= ) 到 65。 如果它满足这个条件,我们告诉程序打印出 string Passing grade

将程序保存为 grade.go 并从终端窗口 使用命令 go run grade.go 本地编程环境中运行它。

在这种情况下,70的等级确实满足大于等于65的条件,所以运行程序会得到如下输出:

OutputPassing grade

现在让我们通过将 grade 变量的值更改为 60 来更改此程序的结果:

等级.go

package main

import "fmt"

func main() {
    grade := 60

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

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

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

帐户.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 运行程序时,我们将收到以下输出:

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

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

其他声明

即使 if 语句的计算结果为假,我们也可能希望程序执行某些操作。 在我们的成绩示例中,我们需要输出成绩是通过还是失败。

为此,我们将在上面的等级条件中添加一个 else 语句,其构造如下:

等级.go

package main

import "fmt"

func main() {
    grade := 60

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

由于等级变量的值为 60,因此 if 语句的计算结果为 false,因此程序不会打印出 Passing grade。 接下来的 else 语句告诉程序无论如何都要做某事。

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

OutputFailing grade

如果我们随后重写程序以赋予等级 65 或更高的值,我们将改为收到输出 Passing grade

要在银行账户示例中添加 else 语句,我们将代码重写如下:

帐户.go

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.")
    }
}
OutputYour balance is 0 or above.

在这里,我们将 balance 变量值更改为正数,以便打印 else 语句。 要打印第一个 if 语句,我们可以将值重写为负数。

通过将 if 语句与 else 语句组合,您正在构建一个由两部分组成的条件语句,它将告诉计算机执行某些代码,无论 if 条件是否成立遇见了。

否则 if 语句

到目前为止,我们已经为条件语句提供了一个 Boolean 选项,每个 if 语句评估为真或假。 在许多情况下,我们需要一个评估两个以上可能结果的程序。 为此,我们将使用 else if 语句,在 Go 中写为 else ifelse if 或 else if 语句看起来像 if 语句,并将评估另一个条件。

在银行账户程序中,我们可能希望为三种不同的情况提供三个离散输出:

  • 余额低于0
  • 余额等于0
  • 余额大于0

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

帐户.go

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.")
    }
}

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

  • 如果变量 balance 等于 0 我们将收到来自 else if 语句的输出 (Balance is equal to 0, add funds soon.)
  • 如果变量 balance 设置为正数,我们将收到来自 else 语句 (Your balance is 0 or above.) 的输出。
  • 如果变量 balance 设置为负数,则输出将是来自 if 语句 (Balance is below 0, add funds now or you will be charged a penalty) 的字符串。

但是,如果我们想要拥有三种以上的可能性怎么办? 我们可以通过在代码中写入多个 else if 语句来做到这一点。

grade.go 程序中,我们重写代码,使得有几个字母等级对应数字等级的范围:

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

要运行此代码,我们将需要一个 if 语句、三个 else if 语句和一个将处理所有失败情况的 else 语句。

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

等级.go

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 grade,如果等级小于90,程序会继续下一条语句……
  2. 如果分数大于等于80,程序会打印B grade,如果分数小于等于79,程序会继续下一条语句……
  3. 如果成绩大于等于70,程序会打印C grade,如果成绩小于等于69,程序会继续下一条语句……
  4. 如果等级大于等于65,程序会打印D grade,如果等级小于等于64,程序会继续下一条语句……
  5. 程序将打印 Failing grade 因为上述所有条件都不满足。

嵌套 If 语句

一旦您对 ifelse ifelse 语句感到满意,就可以继续使用嵌套条件语句。 如果第一个条件执行为真,我们可以使用嵌套的 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 是否也计算为真。 如果两种情况都为真,则输出将是:
Outputtrue
yes
  • 但是,如果 statement1 计算结果为真,而 nested_statement 计算结果为假,则输出将是:
Outputtrue
no
  • 如果 statement1 计算结果为 false,则嵌套的 if-else 语句将不会运行,因此 else 语句将单独运行,输出将是:
Outputfalse

我们还可以在整个代码中嵌套多个 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 语句的代码将如下所示:

等级.go

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+:

等级.go

...
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-")
        }
...

在此代码中,对于设置为 96grade 变量,程序将运行以下内容:

  1. 检查成绩是否大于等于65(真)
  2. 打印出 Passing grade of:
  3. 检查成绩是否大于等于90(真)
  4. 检查成绩是否大于96(假)
  5. 检查成绩是否大于 93 并且小于或等于 96(真)
  6. 打印 A
  7. 离开这些嵌套的条件语句并继续剩下的代码

因此,96 分的程序输出如下所示:

OutputPassing grade of: A

嵌套的 if 语句可以为您的代码添加几个特定级别的条件。

结论

通过使用像 if 语句这样的条件语句,您可以更好地控制程序执行的内容。 条件语句告诉程序评估是否满足某个条件。 如果满足条件,它将执行特定代码,但如果不满足,程序将继续向下移动到其他代码。

要继续练习条件语句,请尝试使用不同的 运算符 以更加熟悉条件语句。