Go:条件控制语句
在 Go 语言中,主要的条件控制语句有 if-else、switch 和 select。以下是对它们的简单介绍:
1. if 语句:
if 语句用于根据条件执行不同的代码块。它的基本形式如下:
if condition {
// code block
} else if condition2 {
// code block 2
} else {
// default code block
}
condition是一个布尔表达式,如果为真,将执行与if关联的代码块。- 可以有零个或多个
else if部分,每个else if部分都有一个条件,如果前面的条件为假且当前条件为真,则执行相应的代码块。 - 可以有一个可选的
else部分,用于处理所有条件均为假的情况。
// 示例
num := 42
if num > 50 {
fmt.Println("Number is greater than 50")
} else if num < 0 {
fmt.Println("Number is negative")
} else {
fmt.Println("Number is between 0 and 50 (inclusive)")
}
2. switch 语句:
switch 语句用于根据一个表达式的值选择不同的执行路径。它的基本形式如下:
switch expression {
case value1:
// code block 1
case value2:
// code block 2
default:
// default code block
}
expression是一个表达式,其值会与各个case的值进行比较。- 如果
expression的值与某个case的值相匹配,将执行相应的代码块。 - 可以有多个
case,每个case后面跟着一个值。 default是一个可选部分,表示如果没有匹配的case,则执行default后面的代码块。
// 示例
day := "Saturday"
switch day {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
fmt.Println("It's a weekday.")
case "Saturday", "Sunday":
fmt.Println("It's a weekend.")
default:
fmt.Println("Invalid day.")
}
3. select 语句:
select 语句用于处理通道(channel)操作,它类似于 switch,但专门用于选择执行哪个通道操作。select 语句用于在多个通道操作中进行选择,如果有多个通道操作都可以执行,则随机选择一个执行。
select {
case msg1 := <-ch1:
// code block 1
fmt.Println("Received", msg1)
case msg2 := <-ch2:
// code block 2
fmt.Println("Received", msg2)
case ch3 <- "Hello":
// code block 3
fmt.Println("Sent Hello")
default:
// default code block
fmt.Println("No communication")
}
在 select 语句中,只有一个 case 会被执行,选择规则是随机的。如果没有可执行的 case,则执行 default。
4. 对比 if-else 和 switch
if-else 和 switch 是用于控制流的两个主要语句。它们都用于根据条件执行不同的代码块,但在某些情况下,switch 语句可能更适合一些特定的场景。下面是对比它们的一些方面:
4.1 可读性和简洁性
if-else: 适用于简单的条件判断,易于理解和编写。当只有少数几个条件时,if-else可能更直观。if condition1 {
// code block 1
} else if condition2 {
// code block 2
} else {
// default code block
}
switch: 适用于多个条件的情况,尤其是当条件是固定的值时。switch语句可以更加清晰地表达多个相等条件的情况。switch value {
case condition1:
// code block 1
case condition2:
// code block 2
default:
// default code block
}
4.2 条件匹配
if-else: 使用if语句可以使用任意的条件表达式,包括比较运算符、逻辑运算符等。if x > 0 && x < 10 {
// code block
} else {
// default code block
}
switch:switch语句可以用于比较固定值,不仅仅是等于条件,还可以是其他比较操作符。switch x {
case 1:
// code block 1
case 2, 3:
// code block 2
default:
// default code block
}
4.3 类型匹配
if-else: 可以通过类型断言来进行类型匹配。if value, ok := x.(int); ok {
// code block
} else {
// default code block
}
switch:switch语句可以直接匹配接口值的类型。switch x.(type) {
case int:
// code block 1
case string:
// code block 2
default:
// default code block
}
4.4 Fallthrough
if-else: 不支持fallthrough。switch:switch语句可以使用fallthrough来继续执行下一个case。switch x {
case 1:
// code block 1
fallthrough
case 2:
// code block 2
default:
// default code block
}
4.5 比较多个值
if-else: 需要使用多个if语句来比较多个值。if x == 1 {
// code block 1
} else if x == 2 {
// code block 2
} else {
// default code block
}
switch:switch语句可以一次性比较多个值。switch x {
case 1, 2:
// code block
default:
// default code block
}
扩展:fallthrough
fallthrough 是 Go 语言中的一个特殊关键字,用于在 switch 语句中强制执行下一个 case 的代码块,而不进行条件判断。在正常情况下,switch 语句在匹配到一个 case 后会退出整个 switch 语句,但使用 fallthrough 关键字可以改变这一行为。
以下是一个使用 fallthrough 的简单示例:
package main
import "fmt"
func main() {
switch num := 2; num {
case 1:
fmt.Println("This is case 1.")
fallthrough
case 2:
fmt.Println("This is case 2.")
fallthrough
case 3:
fmt.Println("This is case 3.")
}
}
在这个示例中,fallthrough 关键字被用于在匹配到 case 1 和 case 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:条件控制语句的更多相关文章
- javaScript条件控制语句
当某段代码的执行,需要首先满足某些条件时,我们就需要用到条件控制语句.判断条件是否满足,满足条件才去执行某些代码. 如判断数组中值等于条件值时,将这个值从数组中删除 a.switch <scri ...
- 【C语言入门教程】3.3 条件控制语句
在程序的 3 种基本结构中,第二种是选择结构,选择结构是根据程序运行时获得的条件,决定程序执行情况.条件控制语句可用来实现这种结构,C 语言提供了 if 语句和 switch 语句两种条件控制语句,i ...
- Shell脚本[运算表达式,条件控制语句]
#!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...
- C#基础(三)--运算符及条件控制语句
上一章我们了解了C#的一些数据基本类型.如何定义使用变量及类型之间的相互转换.可能大家会发现程序只能按照我们的要求从上向下这样顺序一条一条的执行. 那么程序能按照我们的要求,当某个条件成立的时候才执行 ...
- Javascript入门(四)条件控制语句
一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...
- Python学习笔记(二):条件控制语句与循环语句及常用函数的用法
总结的内容: 1.条件控制语句 2.while循环语句 3.for循环语句 4.函数的用法 一.条件控制语句 1.介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决 ...
- Python条件控制语句
条件控制语句 if语句 if条件加表达式 if-else语句 if-elif-else语句 if 表达式1: 语句1 elif 表达式2: 语句2 elif 表达式3: 语句3 else: 语句e 逻 ...
- 4_PHP流程控制语句_1_条件控制语句
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP流程控制共有3种类型:条件控制结构.循环结构以及程序跳转和终止语句. 4.1 条件控制语句 4.1.1 if ...
- Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)
Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...
- if条件控制语句和switch语句
if条件控制语句(判断范围,在一定区间内容进行判断) if 如果(第一个条件) else if 如果(第二个条件 可以无限加) else 否则(只能有一个 上面都不满足的情况下进入) if和else ...
随机推荐
- Django+anaconda(spyder)
一.搭建django虚拟环境 打开anaconda prompt 输入:conda create -n mydjango_env 判断(y/n):y 查看虚拟环境 conda env list *号表 ...
- .NET周刊【8月第3期 2023-08-20】
国内主题 抓的是周树人,与我鲁迅有什么关系? https://www.cnblogs.com/JulianHuang/p/17642511.html 问题:作者看到了一个关于Dictionary.Cl ...
- 代替forever下一个部署node的持久化工具---pm2
最近有个后端项目,用的是node,在持久化的时候会挂掉,详细了解到用的是nohup,然后先详细了解了一下nohup nohup是一个Linux命令,用于在系统后台不挂断地运行命令,退出终端不会影响程序 ...
- 以程序员为视角,关于商品详情API接口的说明
商品详情API接口是现代电商平台中非常重要的一部分,它提供了获取淘宝商品详细信息的能力.作为一个程序员,了解如何调用这个API接口是非常关键的. 首先,我们需要明确的是,API接口是应用程序与服务 ...
- Django项目缓存优化
一.为什么要使用缓存 大家可以想一下Django的请求响应流程: → 用户浏览器输入URL地址 → Web服务器将HTTP请求转发给uWSGI服务器 → uWSGI服务器将Request请求转发给Dj ...
- PHP对关联数组(键值对数组)遍历循环
PHP对关联数组循环遍历 $arr=array('yxb'=>20,'ylg'=>21,'lgj'=18); foreach($arr as $name=>$value) { ech ...
- 【爬虫笔记】Python爬虫简单运用爬取代理IP
一.前言 近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求.为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁.本文将介绍如何使用P ...
- Spring注解之@ExceptionHandler 统一异常处理和获取方法名
摘要:在 Spring Boot 中,使用Spring注解@ControllerAdvice 和 @ExceptionHandler 统一处理异常,并捕获方法名,从而快速定位错误原因. 背景分析 ...
- 解密网络通信的关键技术(下):DNS、ARP、DHCP和NAT,你了解多少?
引言 在上一章中,我们详细介绍了域名系统(DNS)和地址解析协议(ARP)的工作原理,从而对域名解析和介质访问控制(MAC)地址寻址有了更深入的了解.在今天的章节中,我们将继续探讨动态主机配置协议(D ...
- 算法1:寻找完数(JS)
任务一:寻找完数 打印10000以内的完数 完数:与自己所有因子之和相等的数. 1 let sum = 0, i, j; // 定义变量sum.i和j 2 3 for (i = 1; i < 1 ...