条件语句:if 与 switch -《Go语言实战指南》

简介: 本文介绍了 Go 语言中两种主要的条件语句:`if` 和 `switch`。`if` 语句包括基本语法、带 `else` 的写法、多分支 `else if` 以及支持初始化语句的功能。`switch` 语句则涵盖基本用法、匹配多个值、逻辑判断和 `fallthrough` 的使用。文章还提供了选择建议,帮助开发者根据场景决定使用哪种语句。总结指出,`if` 更灵活适合少量条件,而 `switch` 结构化更强,适合多分支判断。

在程序中,我们常常需要依据不同的条件执行不同的代码逻辑。Go 提供了两种主要的条件语句:ifswitch,结构清晰、功能强大。


一、if 语句

1. 基本语法

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

2. 带 else 的写法

if x > 10 {
    fmt.Println("x 大于 10")
} else {
    fmt.Println("x 小于或等于 10")
}

3. 多分支:else if

if x > 100 {
    fmt.Println("x > 100")
} else if x > 50 {
    fmt.Println("50 < x <= 100")
} else {
    fmt.Println("x <= 50")
}

4. 支持初始化语句

if y := getValue(); y > 10 {
    fmt.Println("y 大于 10")
}

y 仅在 if 语句的作用域内可用。


二、switch 语句

1. 基本语法

switch 变量 {
case 值1:
    // 执行代码1
case 值2:
    // 执行代码2
default:
    // 所有 case 不匹配时执行
}

示例:

day := "Monday"
switch day {
case "Monday":
    fmt.Println("今天是周一")
case "Friday":
    fmt.Println("今天是周五")
default:
    fmt.Println("不是周一也不是周五")
}

2. 一个 case 匹配多个值

switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
    fmt.Println("周末休息")
default:
    fmt.Println("工作日")
}

3. 不加表达式,使用逻辑判断

score := 85
switch {
case score >= 90:
    fmt.Println("优秀")
case score >= 60:
    fmt.Println("及格")
default:
    fmt.Println("不及格")
}

4. 支持 fallthrough 强制进入下一分支(默认不会自动贯穿)

i := 2
switch i {
case 1:
    fmt.Println("One")
    fallthrough
case 2:
    fmt.Println("Two") // 会被执行
}

三、ifswitch 的选择建议

情况 推荐语句
单一条件判断 if
多条件、枚举类型匹配 switch
多值匹配或逻辑清晰分支 switch
简单判断+临时变量声明 if(带初始化)

四、小结

  • if 更灵活、适合少量条件;
  • switch 更结构化,适合多分支判断;
  • • 支持在条件语句中声明局部变量;
  • switch 默认不贯穿,用 fallthrough 显式声明。
相关文章
|
6月前
|
JSON API 数据格式
淘宝天猫商品评论API接口指南
淘宝天猫商品评论API接口助您高效获取评论数据。首先注册淘宝开放平台账号并完成实名认证,接着创建应用、申请权限(如“tmall.item.evaluate.get”),最后用编程语言调用API。该接口支持多样化数据(用户昵称、评分、追评等)、灵活筛选与分页功能,并依托淘宝技术确保实时性和稳定性,满足数据分析需求。
284 11
|
6月前
|
安全 Go
defer关键字:延迟调用机制-《Go语言实战指南》
Go 语言中的 `defer` 是用于延迟执行函数调用的关键字,广泛应用于资源释放、异常捕获和日志记录等场景。它在函数返回前执行,支持栈式后进先出(LIFO)顺序,参数求值时机为声明时而非执行时。常见用法包括文件关闭、锁解锁及结合 `recover` 处理 panic。尽管高效,频繁使用可能带来性能开销,需谨慎处理。总结而言,`defer` 是构建健壮代码的核心工具之一。
|
6月前
|
人工智能 前端开发 JavaScript
打造一款响应式图片画廊
这段内容介绍了使用 CodeBuddy 辅助开发一个响应式图片画廊页面的过程。项目采用了 CSS Grid 和 Masonry 布局实现不等高图片排列,通过 Lightbox 实现大图预览与键盘切换,并加入了无限滚动加载和分类筛选功能。在开发中,CodeBuddy 提供了从 HTML 结构到交互逻辑的全面支持,帮助解决了布局空白、图片自适应等问题,展现了 AI 助手在前端开发中的高效辅助能力。
178 12
|
7月前
|
人工智能 运维 JavaScript
当AI学会了自我升级,天网还会远吗?
文章通过一个模拟侦探游戏的例子展示了AI如何通过“自我升级”和动态执行代码的能力来解决复杂问题。
308 33
当AI学会了自我升级,天网还会远吗?
|
6月前
|
存储 Go
Go语言之接口与多态 -《Go语言实战指南》
Go 语言中的接口是实现多态的核心机制,通过一组方法签名定义行为。任何类型只要实现接口的所有方法即视为实现该接口,无需显式声明。本文从接口定义、使用、底层机制、组合、动态行为到工厂模式全面解析其特性与应用,帮助理解 Go 的面向接口编程思想及注意事项(如 `nil` 陷阱)。
200 22
|
6月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
6月前
|
人工智能 前端开发 JavaScript
从代码中诞生的浪漫:一个程序员的表白艺术
本文介绍了一款用代码表达爱意的表白网页项目,通过JavaScript、HTML5和CSS3技术实现。它不仅是一个简单的网页,更是一段爱情诗、情感载体和个人魅力展示。借助CodeBuddy智能助手,项目实现了动态页面效果、多媒体展示和互动游戏等功能,支持多设备兼容与性能优化。开源分享旨在激发创意,未来还将拓展多语言支持和社区模块,证明代码也能编织浪漫。
359 19
|
6月前
|
存储 NoSQL 算法
Redis设计与实现——数据结构与对象
Redis 是一个高性能的键值存储系统,其数据结构设计精妙且高效。主要包括以下几种核心数据结构:SDS、链表、字典、跳跃表、整数集合、压缩列表。此外,Redis 对象通过类型和编码方式动态转换,优化内存使用,并支持引用计数、共享对象和淘汰策略(如 LRU/LFU)。这些特性共同确保 Redis 在性能与灵活性之间的平衡。
|
6月前
|
Go C++
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
193 34
|
6月前
|
关系型数据库 数据库 PostgreSQL
【赵渝强老师】在PostgreSQL中使用file_fdw访问外部文件系统
本文介绍了PostgreSQL的file_fdw扩展,它支持直接从数据库访问服务器文件系统中的文件,文件格式需为text、csv或binary。内容涵盖从编译安装扩展、配置postgresql.conf参数、重启数据库实例,到创建扩展、外部文件服务及外部表的完整流程,并通过具体示例展示如何查询外部表数据,同时附有视频讲解以帮助理解操作步骤。
208 22