ZetCode

Golang if 关键字

最后修改于 2025 年 5 月 7 日

本教程将解释如何在 Go 中使用 if 关键字。我们将通过实际的决策示例来涵盖条件逻辑基础。

if 语句仅在指定的条件评估为 true 时执行一段代码。它是控制程序流程的基础。

在 Go 中,if 可以与可选的 else ifelse 子句一起使用。它支持初始化语句,并且不需要在条件周围加括号。

基本 if 语句

if 的最简单形式检查单个条件。此示例演示了基本的条件执行。

basic_if.go
package main

import "fmt"

func main() {
    age := 20
    
    if age >= 18 {
        fmt.Println("You are an adult")
    }
}

代码检查 age 是否大于或等于 18。仅当条件为 true 时才会打印消息。即使对于单个语句,也需要花括号。

If 语句带 else 子句

当条件为 false 时,else 子句提供备用执行。此示例显示了两种路径。

if_else.go
package main

import "fmt"

func main() {
    temperature := 25.5
    
    if temperature > 30 {
        fmt.Println("It's hot outside")
    } else {
        fmt.Println("It's not too hot")
    }
}

当温度超过 30 度时,将打印第一条消息。否则,将执行 else 块。在任何给定的执行中,只有一个分支会运行。

If 语句带 else if 链

可以使用 else if 检查多个条件。此示例演示了多路决策结构。

if_elseif.go
package main

import "fmt"

func main() {
    score := 85
    
    if score >= 90 {
        fmt.Println("Grade: A")
    } else if score >= 80 {
        fmt.Println("Grade: B")
    } else if score >= 70 {
        fmt.Println("Grade: C")
    } else {
        fmt.Println("Grade: D or below")
    }
}

条件从上到下进行评估。第一个为 true 的条件会执行其块,跳过其余的。else 子句处理所有剩余的情况。

If 语句带初始化语句

Go 允许在条件之前初始化变量。此示例展示了惯用的错误检查模式。

if_init.go
package main

import (
    "fmt"
    "os"
)

func main() {
    if file, err := os.Open("data.txt"); err != nil {
        fmt.Println("Error opening file:", err)
    } else {
        fmt.Println("File opened successfully")
        file.Close()
    }
}

初始化语句声明了 fileerr。这些变量的作用域限定在 if-else 块内。此模式在 Go 中很常见。

嵌套 if 语句

If 语句可以嵌套以创建复杂的逻辑。此示例按顺序检查多个条件。

nested_if.go
package main

import "fmt"

func main() {
    age := 25
    hasLicense := true
    
    if age >= 16 {
        if hasLicense {
            fmt.Println("You can drive")
        } else {
            fmt.Println("You need a license")
        }
    } else {
        fmt.Println("You're too young to drive")
    }
}

外部 if 语句检查年龄,而内部 if 语句检查许可证状态。必须满足每个条件才能执行完整的路径。正确的缩进可以提高可读性。

条件中的逻辑运算符

条件可以使用逻辑运算符组合多个表达式。此示例演示了 AND 和 OR 操作。

logical_if.go
package main

import "fmt"

func main() {
    hour := 14
    isWeekend := false
    
    if hour >= 9 && hour <= 17 && !isWeekend {
        fmt.Println("Work hours")
    } else if hour < 7 || hour > 22 {
        fmt.Println("Quiet hours")
    } else {
        fmt.Println("Regular hours")
    }
}

&& 运算符要求所有条件都为 true。|| 运算符只需要一个 true 条件。括号可以澄清复杂的表达式。

短路求值

Go 从左到右评估逻辑表达式,并在可能的情况下提前停止。此示例显示了它如何影响程序流。

short_circuit.go
package main

import "fmt"

func isPositive(n int) bool {
    fmt.Println("Checking positivity...")
    return n > 0
}

func isEven(n int) bool {
    fmt.Println("Checking evenness...")
    return n%2 == 0
}

func main() {
    num := 10
    
    if isPositive(num) && isEven(num) {
        fmt.Println("Number is positive and even")
    }
    
    num = -5
    if isPositive(num) && isEven(num) {
        fmt.Println("This won't print")
    }
}

使用 && 时,如果第一个条件为 false,则不会评估第二个条件。使用 || 时,如果第一个条件为 true,则跳过第二个条件。这可以防止不必要的计算。

来源

Go 语言规范

本教程通过各种场景下的条件执行的实际示例,涵盖了 Go 中的 if 关键字。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程