3.1 Go if 语句

1. 基本 if 语句

Go 的 if 不需要括号包裹条件,条件为 true 时执行代码块:

package main

import "fmt"

func main() {
    age := 20

    // 判断 age 是否 >= 18
    if age >= 18 {
        fmt.Println("You are an adult")
    }
}

执行结果:

You are an adult

要点:

  • 条件不需要括号:if age >= 18 而非 if (age >= 18)
  • 大括号 { 必须与 if 在同一行(分号规则要求)
  • 只有 true 分支,没有 false 分支时,条件不满足则什么都不做

2. if-else 语句

条件为 true 执行 if 分支,为 false 执行 else 分支:

package main

import "fmt"

func main() {
    temperature := 25

    if temperature > 30 {
        fmt.Println("It's hot outside")
    } else {
        fmt.Println("It's not hot outside")
    }
}

执行结果:

It's not hot outside

要点:

  • else 分支在条件为 false 时执行
  • else 的 { 也必须与 else 在同一行
  • temperature = 25,条件 25 > 30 为 false,所以走了 else 分支

3. if-else if-else 多分支链

多个条件按顺序判断,匹配第一个满足的分支:

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 if score >= 60 {
        fmt.Println("Grade: D")
    } else {
        fmt.Println("Grade: F")
    }
}

执行结果:

Grade: B

要点:

  • 条件从上到下依次判断,匹配第一个为 true 的分支后,后面的分支全部跳过
  • score = 85:>= 90 为 false → >= 80 为 true → 输出 B,后面的 C/D/F 分支不再判断
  • else 是兜底分支,所有条件都不满足时执行
  • Go 没有类似 C 的 switch-case fall-through 问题,else if 天然只匹配一个分支

4. if 语句中的初始化(if with init statement)

Go 支持在 if 条件前添加初始化语句,用分号分隔。初始化变量的作用域仅限 if-else 块内:

package main

import "fmt"

func main() {
    if x := 10 + 5; x > 12 {
        fmt.Println("x is greater than 12")
    } else {
        fmt.Println("x is not greater than 12")
    }

    // x 在这里不可访问!
    // fmt.Println(x) // 编译报错:undefined: x
}

执行结果:

x is greater than 12

要点:

  • if x := 10 + 5; x > 12 — 分号前是初始化语句,分号后是条件判断

  • x 的作用域仅限 if-else 整个代码块(包括 else 分支),块外不可访问

  • 这是 Go 的特色语法,常用于先获取值再判断的场景:

    if err := doSomething(); err != nil {
        // 处理错误,err 只在这个 if 块内有效
    }
    // err 在这里不可访问,避免污染外层作用域
    
  • 好处:变量不需要在外层声明,避免作用域污染


5. 嵌套 if 语句

if 可以嵌套使用,内层 if 在外层条件满足时才判断:

package main

import "fmt"

func main() {
    age := 20

    if age >= 16 {
        if age >= 21 {
            fmt.Println("Can drink alcohol")
        } else {
            fmt.Println("Can drive but not drink alcohol")
        }
    } else {
        fmt.Println("Too young to drive")
    }
}

执行结果:

Can drive but not drink alcohol

要点:

  • age = 20:外层 age >= 16 为 true → 进入内层 → age >= 21 为 false → 输出 "Can drive but not drink alcohol"
  • 嵌套 if 的逻辑:先判断大前提(是否 >= 16),再判断小前提(是否 >= 21)
  • 嵌套层级不宜过深(一般不超过 2-3 层),否则代码可读性差
  • 嵌套 if 可以用 else if 改写为扁平结构,但逻辑含义不同:嵌套是"先满足 A,再看 B",else if 是"A/B/C 选其一"

知识点总结

<table style="font-size: 15px;border-collapse: collapse;border-color: rgb(222, 224, 227);max-width: 526px !important;"><tbody><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="91"><span leaf="">知识点</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="93"><span leaf="">关键概念</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="95"><span leaf="">基本 if</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="97"><span leaf="">条件不需要括号,</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="99"><span leaf="">if-else</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="101"><span leaf="">true 走 if,false 而走 else</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="103"><span leaf="">if-else if-else</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="105"><span leaf="">从上到下依次判断,匹配第一个为 true 的分支</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="107"><span leaf="">if 初始化语句</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="109"><span leaf="">if init; condition {}</span></span></span></td></tr><tr><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="111"><span leaf="">嵌套 if</span></span></span></td><td style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding: 8px;border: 1px solid rgb(204, 204, 204);white-space: normal;line-height: 2em;"><span style="font-family: "PingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-weight: 400;width: inherit;word-break: break-all;display: inline-block;text-align: left;"><span key="113"><span leaf="">外层条件满足后才判断内层,层级不宜过深</span></span></span></td></tr></tbody></table>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容