Go语言中的流程控制语句

简介: 本教程详细介绍了Go语言中的流程控制语句,包括if条件判断、if-else分支选择、switch多分支结构、for循环、break与continue控制语句以及goto跳转语句的使用方法和注意事项。

流程控制语句

if语句

在Go语言中,可以在if后面加上一段执行语句,执行语句也可以用作对if条件的判断。它的语法格式为:

css

体验AI代码助手

代码解读

复制代码

if a := condition(); a == nil {
    //代码块
}

a赋值为condition()方法的结果,然后让a与nil进行判断,如果为true,那么会执行代码块中的代码,否则不执行,而且a的作用域只会在这条语句的范围内。

if···else语句

如果存在第二个分支,则可以在上面代码的基础上添加else语句以及另一个代码块。这个代码块中的代码只有在条件不满足时才会执行。if和else中的两个代码块是相互独立的分支,两者只可以执行其中的一个。语法格式为:

arduino

体验AI代码助手

代码解读

复制代码

if condition {
    //代码块
} else {
    //代码块
}

switch语句

switch语句是用来进行多分支选择的语句,且Go语言的switch语句要比其他语言的更加通用,表达式的值不必为常量,甚至可以不为整数。它的语法格式为:

arduino

体验AI代码助手

代码解读

复制代码

switch expression {
    case value1:
        //代码块
    case value2:
        //代码块
    default:
        //代码块
}

expression是一个表达式,value1、value2等是可能的取值,如果expression等于其中某个值,那么会执行相应的代码块,如果都不匹配,则执行default代码块。

在Go语言中,case和case之间都是独立的代码块,默认每个case后自带一个break,不需要用户自己编写。如果不需要每个case执行后自动截止,可以使用fallthrough来强制执行没有执行过的case代码。

go

体验AI代码助手

代码解读

复制代码

d := 2
switch d {
    case 1:
        fmt.Print("星期一")
    case 2:
        fmt.Print("星期二")
        fallthrough
    case 3:
        fmt.Print("星期三")
    default:
        //代码块
}

输出的结果为 星期二星期三

for循环

for语句是用来进行循环的语句,它的语法格式:

rust

体验AI代码助手

代码解读

复制代码

for initialization; condition; post {
    //代码块
}

initialization是一个初始化语句,condition是一个循环条件,post是每次循环结束后要执行的语句。当condition为true时,会执行代码块中的代码,然后执行post语句,然后再次判断condition是否为true,以此类推,直到condition为false。

无限循环:

arduino

体验AI代码助手

代码解读

复制代码

for {
    //代码块
}

如果表达式2省略,那么这就是一个无限循环,会一直执行代码块中的代码,除非使用break语句跳出循环。

break语句

Go语言中的break语句可以跳出循环或者switch的代码块,也可以在break后添加标签,用来退出某个标签指定的代码块。它的语法格式为:

kotlin

体验AI代码助手

代码解读

复制代码

for condition {
    //代码块
    if condition2 {
        break
    }
}

当满足condition2时,会跳出循环。

continue语句

continue语句用于跳过当前循环,进入下一次循环,且可以在for循环内使用,它的语法格式为:

kotlin

体验AI代码助手

代码解读

复制代码

for condition {
    //代码块
    if condition2 {
        continue
    }
}

当满足condition2时,会跳过当前循环,进入下一次循环。

goto语句

在Go语言中,可以通过goto来跳转标签,进行代码之间的跳转。它的语法格式为:

arduino

体验AI代码助手

代码解读

复制代码

label:
//代码块
goto label

其中label是一个标识符,可以是任意字符串。当执行goto语句时,会跳转到指定标签处执行代码。注意,使用goto语句容易导致代码的可读性和可维护性变差,应该尽量避免使用。


转载来源:https://juejin.cn/post/7224125445271732261

相关文章
|
10月前
|
人工智能 前端开发 数据处理
如何将Python元组转换为列表
本文介绍了在Python中将元组转换为列表的方法。通过内置的`list()`函数,可以轻松地将一个元组转换为列表。此外,文章还提供了如何使用列表推导式和`itertools.chain()`方法将包含多个元组的列表展平为单一列表的示例。这些方法对于数据处理和转换非常实用,能够帮助开发者高效操作序列类型数据。文中附有代码实例及输出结果,便于理解与实践。
233 0
|
9月前
|
人工智能 Java 数据库连接
Mybatis执行流程
本文详细分析了 MyBatis 的执行流程,介绍了其核心组件如 SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession 的作用与实现原理,并通过源码解析了 SQL 语句的执行过程,包括动态代理、缓存机制及数据库查询的实现,帮助读者深入理解 MyBatis 的内部工作机制。
270 0
Mybatis执行流程
|
9月前
|
人工智能 缓存 安全
Java中的反射机制:深入探索与应用
Java反射机制是程序运行时动态获取类信息并操作类成员的特性,具备高度灵活性,但也伴随性能与安全风险。本文详解反射的基本用法、高级应用及最佳实践,助你掌握这一强大工具的正确使用方式。
205 0
|
8月前
|
存储 人工智能 Go
Go-Zero全流程实战即时通讯
Go-Zero 是一个功能丰富的微服务框架,适用于开发高性能的即时通讯应用。它具备中间件、工具库和代码生成器,简化开发流程。本文介绍其环境搭建、项目初始化及即时通讯功能实现,涵盖用户认证、消息收发和实时推送,帮助开发者快速上手。
477 0
|
11月前
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
496 0
|
9月前
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
395 1
|
10月前
|
设计模式 Oracle Java
java静态方法和实例方法有何不同
本文深入探讨Java中静态方法与实例方法的区别与应用,从概念、调用方式、内存管理到生命周期全面解析两者差异,并结合实际案例分析设计意图与最佳实践。无论是工具类设计还是性能优化,文章均提供详尽指导,帮助开发者根据具体场景选择合适的方法类型,提升代码效率与可维护性。
342 3
|
9月前
|
存储 人工智能 缓存
SpringBoot离线应用的5种实现方式
在网络依赖日益加深的今天,离线应用的重要性不断上升。本文介绍了基于SpringBoot实现离线应用的五种方式,重点讲解了嵌入式数据库的实现原理与步骤,包括本地数据存储、操作缓存、资源本地化和状态管理等核心功能,分析了其优缺点及适用场景,帮助开发者在无网络环境下构建稳定可靠的应用。
396 0
|
10月前
|
算法 调度 Python
如何在Python中使用Coroutines
本文介绍了在Python中使用轮询程序(coroutines)的方法及其特点。Coroutines是可暂停和恢复执行的函数,与生成器、线程和子程序有所不同。文章详细解释了coroutines的工作原理,包括如何通过`send()`方法传递数据,以及如何用`close()`方法关闭coroutine。此外,还展示了如何构建基于coroutines的流水线结构以处理数据过滤和传输任务。最后总结了coroutines的优势及与其他多任务机制的区别。
213 6
|
9月前
|
人工智能 Java Linux
Go 调度器:一个线程的执行流程
本文详细解析了Go语言运行时调度器的初始化流程,重点介绍了GMP模型的构建过程。内容涵盖调度器初始化函数`runtime·schedinit`、线程与处理器的绑定、P结构体的创建与初始化,以及主Goroutine的启动流程。通过源码分析,帮助读者深入理解Go运行时的底层机制。
198 0