Go 语言if else 条件语句使用教程(流程控制)

 更新时间:2026年04月23日 14:25:54   作者:jieyucx  
本文介绍了Go语言的ifelse条件语句及其应用场景,包括单分支、双分支和多分支的语法格式和注意事项,还讲解了Go语言中if语句的初始化表达式特性及嵌套ifelse用法,并通过综合实战案例巩固知识点,最后,总结了常见错误及避坑指南

大家好~上一篇博客我们掌握了 Go 语言的运算符与控制台输入输出,能实现简单的计算和交互。本篇我们正式进入流程控制的学习——if else 条件语句,它是程序“做判断、分分支”的核心,也是后续学习循环、函数的基础。

和之前一样,所有知识点都搭配可直接复制运行的代码示例,零基础也能轻松上手,学完就能写出有判断逻辑的 Go 程序,彻底告别“顺序执行”的单一模式!

一、前置准备

继续使用我们的 GoStudy 项目,新建文件夹 ifelse,创建 main\.go 文件,所有测试代码均在此文件中编写运行。

基础代码结构(复制即可):

package main
import "fmt"
func main() {
    // 所有if else测试代码写在这里
}

核心说明:流程控制的作用是“让程序根据条件执行不同的代码”,就像生活中“如果下雨就带伞,否则就不带”,if else 就是实现这种逻辑的关键语法。

二、if else 核心语法(3种常用场景)

Go 语言的 if else 语法简洁、严谨,有明确的语法规范,主要分为「单分支」「双分支」「多分支」三种场景,我们逐一讲解,重点注意语法细节(新手易踩坑)。

1. 单分支:if 语句(满足条件才执行)

最基础的判断:如果某个条件为真,就执行一段代码;条件为假,就跳过这段代码

语法格式(必须严格遵循):

if 条件表达式 {
    // 条件为 true 时,执行的代码
}

关键注意点(必看):

  • 条件表达式的结果必须是 bool 类型(true / false),常用关系运算符(==、\!=、\>、\<)或逻辑运算符(\&\&、\|\|、\!)组合。
  • 关键字 if 后面的左大括号 \{必须和 if 及条件表达式在同一行,否则会编译报错(Go 编译器强制规定)[superscript:3]。
  • 即使大括号内只有一行代码,大括号也不能省略(遵循 Go 代码规范,避免逻辑混乱)[superscript:5]。
  • 条件表达式两侧的括号可以省略,复杂条件时加括号能提升可读性。

示例代码(判断年龄是否成年):

package main
import "fmt"
func main() {
    // 定义年龄变量
    age := 19
    // 单分支判断:如果年龄大于等于18,打印成年
    if age >= 18 {
        fmt.Println("你已成年,具备独立民事行为能力")
    }
    // 条件为假时,跳过上面的代码,执行下面的语句
    fmt.Println("程序执行完毕")
}

运行结果:

你已成年,具备独立民事行为能力
程序执行完毕

补充:如果将 age 改为 17,运行结果只会打印“程序执行完毕”,因为 age \>= 18false,跳过了 if 内部的代码。

2. 双分支:if else 语句(二选一)

场景:如果条件为真,执行一段代码;如果条件为假,执行另一段代码,两个分支必执行一个,互不冲突。

语法格式:

if 条件表达式 {
    // 条件为 true 时,执行的代码
} else {
    // 条件为 false 时,执行的代码
}

关键注意点(必看):

  • 关键字 else 必须紧跟 if 分支的右大括号 \},且在同一行,否则编译报错(Go 语法强制要求)[superscript:7]。
  • else 后面的左大括号 \{,必须和 else 在同一行,不能换行。
  • if 和 else 内部的代码块,只会执行其中一个,不会同时执行。

示例代码(判断成绩是否及格):

package main
import "fmt"
func main() {
    // 定义成绩变量(结合上一篇的输入知识,接收用户输入)
    var score int
    fmt.Print("请输入你的考试成绩:")
    fmt.Scan(&score)
    // 双分支判断:及格与否
    if score >= 60 {
        fmt.Printf("你的成绩是 %d 分,及格啦!🎉\n", score)
    } else {
        fmt.Printf("你的成绩是 %d 分,未及格,需要补考哦~\n", score)
    }
}

运行结果(两种情况):

请输入你的考试成绩:85
你的成绩是 85 分,及格啦!🎉

请输入你的考试成绩:58
你的成绩是 58 分,未及格,需要补考哦~

3. 多分支:if else if else 语句(多选一)

场景:有多个条件需要判断,依次检查每个条件,满足哪个条件就执行对应的代码;所有条件都不满足,执行最后的 else 代码(else 可选)。

适合需要分等级、分场景的判断(如成绩分级、年龄分段)。

语法格式:

if 条件1 {
    // 条件1为 true 时,执行的代码
} else if 条件2 {
    // 条件1为 false、条件2为 true 时,执行的代码
} else if 条件3 {
    // 条件1、2为 false、条件3为 true 时,执行的代码
} else {
    // 所有条件都为 false 时,执行的代码(可选)
}

关键注意点(必看):

  • else if 可以有多个(根据需求添加),但建议不超过3个,否则会影响代码可读性(复杂场景可后续学习 switch 语句)。
  • else if 必须紧跟前一个分支的右大括号\},且在同一行,左大括号 \{ 必须和else if 在同一行[superscript:5]。
  • 多个条件是“互斥”的,只要有一个条件满足,就会执行对应的代码,后续的条件不会再判断。
  • 最后的 else 是可选的,如果所有条件都不满足,且没有 else,程序会跳过整个多分支结构,继续执行后续代码。

示例代码(成绩分级):

package main
import "fmt"
func main() {
    var score int
    fmt.Print("请输入你的成绩:")
    fmt.Scan(&score)
    // 多分支判断成绩等级
    if score >= 90 {
        fmt.Printf("成绩 %d 分,等级:优秀🌟\n", score)
    } else if score >= 80 {
        fmt.Printf("成绩 %d 分,等级:良好👍\n", score)
    } else if score >= 60 {
        fmt.Printf("成绩 %d 分,等级:及格✅\n", score)
    } else {
        fmt.Printf("成绩 %d 分,等级:不及格❌\n", score)
    }
    fmt.Println("成绩分级完成!")
}

运行结果(四种情况):

请输入你的成绩:95
成绩 95 分,等级:优秀🌟
成绩分级完成!

请输入你的成绩:88
成绩 88 分,等级:良好👍
成绩分级完成!

请输入你的成绩:65
成绩 65 分,等级:及格✅
成绩分级完成!

请输入你的成绩:59
成绩 59 分,等级:不及格❌
成绩分级完成!

小贴士:多分支的条件顺序很重要!比如“score >= 60”不能放在“score >= 80”前面,否则 80 分以上的成绩也会被判断为“及格”,因为条件判断会“自上而下”执行,满足第一个条件就会终止后续判断。

三、Go 特色:if 语句的初始化表达式(高频用法)

Go 语言的 if 语句有一个非常实用的特性:可以在 if 条件前添加一个初始化语句,用于定义变量,变量的作用域仅限于整个 if else 结构内部(外部无法访问),能简化代码、避免变量污染。

语法格式:

if 变量初始化; 条件表达式 {
    // 变量可在此处使用
} else if ... {
    // 变量也可在此处使用
} else {
    // 变量也可在此处使用
}

关键说明:

  • 初始化语句和条件表达式之间用 ; 分隔。
  • 初始化的变量,仅在当前 if else 所有分支中有效,出了 if else 结构就无法访问(避免变量冲突)[superscript:6]。
  • 这种写法在 Go 中非常常见,尤其适合结合输入、错误处理等场景。

示例代码(简化输入判断):

package main
import "fmt"
func main() {
    // 简化写法:在if中初始化变量score,同时判断条件
    if score := 85; score >= 90 {
        fmt.Println("优秀")
    } else if score >= 80 {
        fmt.Println("良好")
    } else {
        fmt.Println("及格或不及格")
    }
    // 错误示例:score 仅在上面的if else中有效,此处无法访问
    // fmt.Println(score) // 编译报错:undefined: score
}

补充示例(结合输入):

package main
import "fmt"
func main() {
    // 一次性完成:初始化变量、接收输入、判断条件
    if var age int; fmt.Print("请输入年龄:"); fmt.Scan(&age) {
        if age >= 18 {
            fmt.Println("成年")
        } else {
            fmt.Println("未成年")
        }
    }
}

四、嵌套 if else(进阶用法)

场景:在一个 if 或 else 分支内部,再嵌套另一个完整的 if else 结构,用于处理“多层判断”的场景(如“先判断是否成年,成年后再判断是否有驾照”)。

语法格式(简化):

if 条件1 {
    // 条件1为true,执行此处
    if 条件2 {
        // 条件1和条件2都为true,执行此处
    } else {
        // 条件1为true、条件2为false,执行此处
    }
} else {
    // 条件1为false,执行此处
}

关键注意点(必看):

  • 嵌套层级建议不超过 3 层,否则代码会变得混乱、难以维护(可读性变差)。
  • 嵌套的 if else 也要严格遵循语法规范(大括号位置、条件类型等)。
  • 可以通过缩进区分不同层级的分支(Go 建议缩进 4 个空格或 1 个 Tab),提升可读性。

示例代码(多层判断:是否能开车):

package main
import "fmt"
func main() {
    var age int
    var hasLicense bool // 布尔值:true=有驾照,false=无驾照
    fmt.Print("请输入你的年龄:")
    fmt.Scan(&age)
    fmt.Print("你是否有驾照(true=有,false=无):")
    fmt.Scan(&hasLicense)
    // 第一层判断:是否成年
    if age >= 18 {
        fmt.Println("你已成年,符合开车的年龄要求")
        // 第二层判断:是否有驾照
        if hasLicense {
            fmt.Println("恭喜你,可合法开车!")
        } else {
            fmt.Println("你没有驾照,不可开车,需先考驾照~")
        }
    } else {
        fmt.Println("你未成年,不可开车!")
    }
}

运行结果(三种情况):

// 情况1:成年+有驾照
请输入你的年龄:22
你是否有驾照(true=有,false=无):true
你已成年,符合开车的年龄要求
恭喜你,可合法开车!

// 情况2:成年+无驾照
请输入你的年龄:20
你是否有驾照(true=有,false=无):false
你已成年,符合开车的年龄要求
你没有驾照,不可开车,需先考驾照~

// 情况3:未成年
请输入你的年龄:16
你是否有驾照(true=有,false=无):true
你未成年,不可开车!

五、综合实战案例(结合之前知识点)

结合「控制台输入」「运算符」「if else」,实现一个“学生成绩评级+奖学金判断”的完整程序,巩固本篇所有知识点。

需求:

  • 接收用户输入的语文、数学、英语三科成绩;
  • 计算三科平均分;
  • 根据平均分分级(优秀≥90、良好80-89、及格60-79、不及格<60);
  • 额外判断:优秀且平均分≥95,发放一等奖学金;良好且平均分≥85,发放二等奖学金;其他情况无奖学金。

完整代码:

package main
import "fmt"
func main() {
    // 1. 接收用户输入三科成绩
    var chinese, math, english int
    fmt.Print("请输入语文、数学、英语三科成绩(空格分隔):")
    fmt.Scan(&chinese, &math, &english)
    // 2. 计算平均分(浮点型,避免整数取整误差)
    average := (chinese + math + english) / 3.0
    // 3. 输出成绩信息
    fmt.Printf("语文:%d 分,数学:%d 分,英语:%d 分\n", chinese, math, english)
    fmt.Printf("三科平均分:%.1f 分\n", average)
    // 4. 多分支判断成绩等级
    var level string
    if average >= 90 {
        level = "优秀"
    } else if average >= 80 {
        level = "良好"
    } else if average >= 60 {
        level = "及格"
    } else {
        level = "不及格"
    }
    fmt.Printf("成绩等级:%s\n", level)
    // 5. 嵌套判断奖学金(只有优秀、良好才有机会)
    if average >= 80 {
        if average >= 95 {
            fmt.Println("恭喜你,获得一等奖学金!🏆")
        } else if average >= 85 {
            fmt.Println("恭喜你,获得二等奖学金!🎊")
        } else {
            fmt.Println("无奖学金,继续努力哦~")
        }
    } else {
        fmt.Println("无奖学金,继续努力哦~")
    }
}

运行结果示例:

请输入语文、数学、英语三科成绩(空格分隔):96 98 94
语文:96 分,数学:98 分,英语:94 分
三科平均分:96.0 分
成绩等级:优秀
恭喜你,获得一等奖学金!🏆

六、新手常见错误(避坑指南)

  • 大括号位置错误:if、else、else if 后面的大括号没有和关键字在同一行(如 if 条件后换行写 {),导致编译报错[superscript:7]。
  • 错误示例:
  • if age \>= 18 \{ // 错误:\{ 不能换行 fmt\.Println\(\&\#34;成年\&\#34;\) \}
  • 条件表达式不是 bool 类型:比如写 if age(age 是 int 类型),报错“non-bool age (type int) used as if condition”,必须写 if age \>= 18 这类bool结果的表达式。
  • 多分支条件顺序错误:把范围小的条件放在后面,导致条件无法触发(如先判断 score >=60,再判断 score >=80)。
  • 嵌套层级过多:超过3层嵌套,代码可读性变差,容易出错(可尝试拆分逻辑)。
  • 重复使用 if 代替 else if:比如多个独立的 if 语句,导致多个条件同时执行(需求是多选一时,必须用 else if)。
  • if 初始化变量的作用域错误:试图在 if else 外部访问初始化的变量,导致编译报错(变量仅在 if else 内部有效)。
  • 多余的判断:条件本身是 bool 类型,却多此一举写 if hasLicense == true,直接写 if hasLicense 即可(同理,取反用 if \!hasLicense)。

七、本篇总结

  • 核心作用if else 用于实现“条件判断、分支执行”,让程序更灵活,不再是单一顺序执行。
  • 三种常用结构:单分支(if)、双分支(if else)、多分支(if else if else),根据需求选择。
  • 语法规范:大括号位置、条件类型、else/else if 的衔接,必须严格遵循(否则编译报错)。
  • Go 特色:if 可添加初始化语句,变量作用域仅限于 if else 内部,简化代码。
  • 实战技巧:结合输入、运算符,实现“输入→判断→输出”的完整逻辑;嵌套不超过3层,条件顺序要合理。

本篇的 if else 是流程控制的基础,下一篇我们将学习另一个核心——for 循环语句,学会循环后,就能实现重复执行的逻辑(如猜数字游戏、批量处理数据),继续加油!

到此这篇关于Go 语言if else 条件语句使用教程(流程控制)的文章就介绍到这了,更多相关go if else条件语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang内存对齐详解

    golang内存对齐详解

    在golang中,每一种数据类型都有其对应的数据类型大小,也就是占用了多少内存空间,我们可以通过unsafe.Sizeof函数,来确定一个变量占用的内存字节数,本文将详细给大家介绍golang内存对齐,需要的朋友可以参考下
    2023-10-10
  • 自定义Go Json的序列化方法译文

    自定义Go Json的序列化方法译文

    这篇文章主要为大家介绍了自定义Go Json序列化方法译文,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Golang并发编程重点讲解

    Golang并发编程重点讲解

    这篇文章主要介绍了Golang并发编程,在许多环境中,实现对共享变量的正确访问所需要的微妙之处使并发编程变得困难。Go鼓励一种不同的方法,在这种方法中,共享值在通道中传递,实际上,从不由单独的执行线程主动共享
    2023-04-04
  • Go语言解决大模型API调用中的超时错误的方法

    Go语言解决大模型API调用中的超时错误的方法

    在开发基于大语言模型(如DeepSeek)的智能应用时,我们常通过API实现自然语言交互,但在处理复杂任务或网络波动时,开发者可能会遭遇 context deadline exceeded错误,本文将以Go语言为例,深入分析该问题的根源,并提供一套完整的优化方案,需要的朋友可以参考下
    2025-05-05
  • GO实现跳跃表的示例详解

    GO实现跳跃表的示例详解

    跳表全称叫做跳跃表,简称跳表,是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。本文将利用GO语言编写一个跳表,需要的可以参考一下
    2022-12-12
  • Golang实现yaml配置文件的解析

    Golang实现yaml配置文件的解析

    这篇文章主要介绍了Golang实现yaml配置文件的解析,文中通过图文结合的方式讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12
  • go开发alertmanger实现钉钉报警

    go开发alertmanger实现钉钉报警

    本文主要介绍了go开发alertmanger实现钉钉报警,通过自己的url实现alertmanager的钉钉报警,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 详解Go中Map类型和Slice类型的传递

    详解Go中Map类型和Slice类型的传递

    这篇文章主要为大家详细介绍了Go中Map类型和Slice类型的传递,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • go 生成器模式的具体使用

    go 生成器模式的具体使用

    生成器是一种创建型设计模式,使你能够分步骤创建复杂对象,本文主要介绍了go生成器模式的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • go test 命令示例详解

    go test 命令示例详解

    go test是Go用来执行测试函数(test function)、基准函数(benchmark function)和示例函数(example function)的命令,这篇文章主要介绍了go test 命令,需要的朋友可以参考下
    2023-11-11

最新评论