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 外层条件满足后才判断内层,层级不宜过深
相关推荐
2601_962070231 小时前
差异基因富集分析(R语言——GO&KEGG&GSEA)
开发语言·golang·r语言
「、皓子~2 小时前
海狸IM 2.1 正式发布
flutter·微服务·golang·electron·开源软件·im·海狸im
运维开发笔记4 小时前
8.1 Go Struct 结构体基础
golang
ttwuai4 小时前
Go 后台接入 CAS 单点登录后,原来的权限怎么继续生效?
开发语言·后端·golang
蓝宝石的傻话21 小时前
因为MiBeeNVR,决定接 onvif-go 自己管理并重构
数码相机·重构·golang
ttwuai1 天前
Go 后台管理系统组件库文档怎么写,才不会坑后续维护?
开发语言·javascript·golang
2601_962066231 天前
golang超详细基础入门教程_golang教程
前端·python·golang
互联网中的一颗神经元2 天前
10. Large 对象分配:直接路径
开发语言·golang
microrain2 天前
从关系库硬扛到专业时序引擎:SagooIoT时序数据存储的架构取舍
物联网·golang·开源·sagooiot