在 Go 语言中,主要的条件控制语句有 if-elseswitchselect。以下是对它们的简单介绍:

1. if 语句:

if 语句用于根据条件执行不同的代码块。它的基本形式如下:

  1. if condition {
  2. // code block
  3. } else if condition2 {
  4. // code block 2
  5. } else {
  6. // default code block
  7. }
  • condition 是一个布尔表达式,如果为真,将执行与 if 关联的代码块。
  • 可以有零个或多个 else if 部分,每个 else if 部分都有一个条件,如果前面的条件为假且当前条件为真,则执行相应的代码块。
  • 可以有一个可选的 else 部分,用于处理所有条件均为假的情况。
  1. // 示例
  2. num := 42
  3. if num > 50 {
  4. fmt.Println("Number is greater than 50")
  5. } else if num < 0 {
  6. fmt.Println("Number is negative")
  7. } else {
  8. fmt.Println("Number is between 0 and 50 (inclusive)")
  9. }

2. switch 语句:

switch 语句用于根据一个表达式的值选择不同的执行路径。它的基本形式如下:

  1. switch expression {
  2. case value1:
  3. // code block 1
  4. case value2:
  5. // code block 2
  6. default:
  7. // default code block
  8. }
  • expression 是一个表达式,其值会与各个 case 的值进行比较。
  • 如果 expression 的值与某个 case 的值相匹配,将执行相应的代码块。
  • 可以有多个 case,每个 case 后面跟着一个值。
  • default 是一个可选部分,表示如果没有匹配的 case,则执行 default 后面的代码块。
  1. // 示例
  2. day := "Saturday"
  3. switch day {
  4. case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
  5. fmt.Println("It's a weekday.")
  6. case "Saturday", "Sunday":
  7. fmt.Println("It's a weekend.")
  8. default:
  9. fmt.Println("Invalid day.")
  10. }

3. select 语句:

select 语句用于处理通道(channel)操作,它类似于 switch,但专门用于选择执行哪个通道操作。select 语句用于在多个通道操作中进行选择,如果有多个通道操作都可以执行,则随机选择一个执行。

  1. select {
  2. case msg1 := <-ch1:
  3. // code block 1
  4. fmt.Println("Received", msg1)
  5. case msg2 := <-ch2:
  6. // code block 2
  7. fmt.Println("Received", msg2)
  8. case ch3 <- "Hello":
  9. // code block 3
  10. fmt.Println("Sent Hello")
  11. default:
  12. // default code block
  13. fmt.Println("No communication")
  14. }

select 语句中,只有一个 case 会被执行,选择规则是随机的。如果没有可执行的 case,则执行 default

4. 对比 if-elseswitch

if-elseswitch 是用于控制流的两个主要语句。它们都用于根据条件执行不同的代码块,但在某些情况下,switch 语句可能更适合一些特定的场景。下面是对比它们的一些方面:

4.1 可读性和简洁性

  • if-else 适用于简单的条件判断,易于理解和编写。当只有少数几个条件时,if-else 可能更直观。

    1. if condition1 {
    2. // code block 1
    3. } else if condition2 {
    4. // code block 2
    5. } else {
    6. // default code block
    7. }
  • switch 适用于多个条件的情况,尤其是当条件是固定的值时。switch 语句可以更加清晰地表达多个相等条件的情况。

    1. switch value {
    2. case condition1:
    3. // code block 1
    4. case condition2:
    5. // code block 2
    6. default:
    7. // default code block
    8. }

4.2 条件匹配

  • if-else 使用 if 语句可以使用任意的条件表达式,包括比较运算符、逻辑运算符等。

    1. if x > 0 && x < 10 {
    2. // code block
    3. } else {
    4. // default code block
    5. }
  • switch switch 语句可以用于比较固定值,不仅仅是等于条件,还可以是其他比较操作符。

    1. switch x {
    2. case 1:
    3. // code block 1
    4. case 2, 3:
    5. // code block 2
    6. default:
    7. // default code block
    8. }

4.3 类型匹配

  • if-else 可以通过类型断言来进行类型匹配。

    1. if value, ok := x.(int); ok {
    2. // code block
    3. } else {
    4. // default code block
    5. }
  • switch switch 语句可以直接匹配接口值的类型。

    1. switch x.(type) {
    2. case int:
    3. // code block 1
    4. case string:
    5. // code block 2
    6. default:
    7. // default code block
    8. }

4.4 Fallthrough

  • if-else 不支持 fallthrough

  • switch switch 语句可以使用 fallthrough 来继续执行下一个 case

    1. switch x {
    2. case 1:
    3. // code block 1
    4. fallthrough
    5. case 2:
    6. // code block 2
    7. default:
    8. // default code block
    9. }

4.5 比较多个值

  • if-else 需要使用多个 if 语句来比较多个值。

    1. if x == 1 {
    2. // code block 1
    3. } else if x == 2 {
    4. // code block 2
    5. } else {
    6. // default code block
    7. }
  • switch switch 语句可以一次性比较多个值。

    1. switch x {
    2. case 1, 2:
    3. // code block
    4. default:
    5. // default code block
    6. }

扩展:fallthrough

fallthrough 是 Go 语言中的一个特殊关键字,用于在 switch 语句中强制执行下一个 case 的代码块,而不进行条件判断。在正常情况下,switch 语句在匹配到一个 case 后会退出整个 switch 语句,但使用 fallthrough 关键字可以改变这一行为。

以下是一个使用 fallthrough 的简单示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. switch num := 2; num {
  5. case 1:
  6. fmt.Println("This is case 1.")
  7. fallthrough
  8. case 2:
  9. fmt.Println("This is case 2.")
  10. fallthrough
  11. case 3:
  12. fmt.Println("This is case 3.")
  13. }
  14. }

在这个示例中,fallthrough 关键字被用于在匹配到 case 1case 2 后继续执行 case 3 的代码块,即使 case 2 的条件也匹配。

需要注意的是,fallthrough 会导致下一个 case 的代码块无条件执行,而不进行后续的条件判断。这在某些情况下可能会带来意外的结果,因此在使用 fallthrough 时需要谨慎。一般而言,fallthrough 的使用场景相对较少,通常在需要某种特定的逻辑流程时才会使用。

在实际编程中,大多数情况下,fallthrough 并不是必须的,而是通过 case 条件来控制流程更加清晰和容易理解。


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特


Go:条件控制语句的更多相关文章

  1. javaScript条件控制语句

    当某段代码的执行,需要首先满足某些条件时,我们就需要用到条件控制语句.判断条件是否满足,满足条件才去执行某些代码. 如判断数组中值等于条件值时,将这个值从数组中删除 a.switch <scri ...

  2. 【C语言入门教程】3.3 条件控制语句

    在程序的 3 种基本结构中,第二种是选择结构,选择结构是根据程序运行时获得的条件,决定程序执行情况.条件控制语句可用来实现这种结构,C 语言提供了 if 语句和 switch 语句两种条件控制语句,i ...

  3. Shell脚本[运算表达式,条件控制语句]

    #!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...

  4. C#基础(三)--运算符及条件控制语句

    上一章我们了解了C#的一些数据基本类型.如何定义使用变量及类型之间的相互转换.可能大家会发现程序只能按照我们的要求从上向下这样顺序一条一条的执行. 那么程序能按照我们的要求,当某个条件成立的时候才执行 ...

  5. Javascript入门(四)条件控制语句

    一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...

  6. Python学习笔记(二):条件控制语句与循环语句及常用函数的用法

    总结的内容: 1.条件控制语句 2.while循环语句 3.for循环语句 4.函数的用法 一.条件控制语句 1.介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决 ...

  7. Python条件控制语句

    条件控制语句 if语句 if条件加表达式 if-else语句 if-elif-else语句 if 表达式1: 语句1 elif 表达式2: 语句2 elif 表达式3: 语句3 else: 语句e 逻 ...

  8. 4_PHP流程控制语句_1_条件控制语句

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP流程控制共有3种类型:条件控制结构.循环结构以及程序跳转和终止语句. 4.1 条件控制语句 4.1.1 if ...

  9. Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)

    Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...

  10. if条件控制语句和switch语句

    if条件控制语句(判断范围,在一定区间内容进行判断) if 如果(第一个条件) else if 如果(第二个条件 可以无限加) else 否则(只能有一个 上面都不满足的情况下进入) if和else ...

随机推荐

  1. quarkus依赖注入之十:学习和改变bean懒加载规则

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...

  2. JavaScript 基础(1) - 笔记

    1 JavaScript基础 1.1 JavaScript 是什么 1.JavaScript(是什么?) 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果. 2.作用(做什么?) 网页特效(监 ...

  3. 【AI绘画模型汇总】分享5个国内实用的AI绘画模型网站-C站AI模型平替网站

    鉴于大家未必会有魔法工具访问civitai(C站)下载AI模型,这里我搜集整理了5个实用的国内版AI模型素材库,无障碍访问下载Stable diffusion模型. 1.LiblibAI 访问速度快, ...

  4. jQuery Ajax执行顺序问题

    代码如下: $(document).ready(function () { var res; $.ajax({ type: 'post', url: 'GridDemo.aspx/PlaceOrder ...

  5. Web攻防--JNDI注入--Log4j漏洞--Fastjson反序列化漏洞

    JNDI注入 什么是JNDI JNDI全称为 Java Naming and Directory Interface(Java命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统 ...

  6. 2023年了,复习了一下spring boot配置使用mongodb

    前言 MongoDB是一个基于分布式文件存储的开源数据库系统,使用C++语言编写.它是一个介于关系数据库和非关系数据库之间的产品,具有类似关系数据库的功能,但又有一些非关系数据库的特点.MongoDB ...

  7. 探析ElasticSearch Kibana在测试工作中的实践应用

    一. 为什么使用ES Kibana 离线数据测试中最重要的就是数据验证,一部分需要测试es存储数据的正确性,另一部分就需要验证接口从es取值逻辑的正确性.而为了验证es取值逻辑的正确性,就需要用到Ki ...

  8. 中国科教工作者协会与CCF PTA联合认证学习须知

    中国科教工作者协会与CCF PTA联合认证学习须知 1.参与认证人员需在科技学堂(www.sciclass.cn)上进行课程学习,然后在PTA官网(pta.ccf.org.cn)报名并参加认证考试,考 ...

  9. ai绘画提示词

    (Drunken with Lights and Swords: 1.8), (Outdoor: 1.8), (Bust Close-up: 2.9), (solo: 3.8), 1 ancient ...

  10. 使用 GitHub Action 自动更新 Sealos 集群的应用镜像

    在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键.Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务.与此同时,随着技术不断发展,集成更多的功能和服务变 ...