3.1 Go if 语句学习笔记

Go if 语句学习笔记

1. 基本 if 语句

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

go 复制代码
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 分支:

go 复制代码
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 多分支链

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

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 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 块内:

go 复制代码
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 的特色语法,常用于先获取值再判断的场景:

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


5. 嵌套 if 语句

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

go 复制代码
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 选其一"

知识点总结

知识点 关键概念
基本 if 条件不需要括号,{ 必须与 if 同行
if-else true 走 if,false 而走 else
if-else if-else 从上到下依次判断,匹配第一个为 true 的分支
if 初始化语句 if init; condition {} --- 变量作用域仅限 if-else 块,避免污染外层
嵌套 if 外层条件满足后才判断内层,层级不宜过深
相关推荐
进击的程序猿~21 小时前
Go Interface源码深度解析指南
开发语言·后端·golang
—Qeyser1 天前
Sponge 脚手架快速创建后端API及接口使用完整教程
golang
不爱洗脚的小滕1 天前
【Golang】Go 语言实现高可用、用户态感知与多端广播的服务端 SSE 架构
开发语言·架构·golang
报错小能手1 天前
Go 简介
开发语言·后端·golang
golang学习记2 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
2501_931803752 天前
深入理解 GORM:从模型定义到关联查询的核心原理
golang
似璟如你2 天前
Java 开发者的 Go 语法基础:从 0 开始快速上手 Go
java·开发语言·后端·golang·go·编程语言
microrain3 天前
从监控孤岛到视联一体:SagooIoT视频监控中心的设计实践
物联网·golang·开源·sagooiot