当前位置: 首页 > news >正文

讲解Golang选择语句

Golang选择语句

  • 1. `if` 语句
    • 1.1 基本语法
    • 1.2 `if-else` 语句
    • 1.3 `if-else if-else` 语句
    • 1.4 简短声明和初始化
    • 1.5 多个条件的逻辑运算
  • 2. `switch` 语句
    • 2.1 基本语法
    • 2.2 示例
    • 2.3 `switch` 语句与 `if` 的对比
    • 2.4 不指定表达式
    • 2.5 `fallthrough` 语句
    • 2.6 `case` 支持多个值
  • 3. 总结

Go语言中的选择语句主要有两种:if语句和switch语句,它们用于根据条件执行不同的代码块。

1. if 语句

1.1 基本语法

if 语句根据条件表达式的布尔值来决定是否执行某段代码。条件表达式的结果必须是一个布尔值。

if condition {// 如果 condition 为 true,执行这里的代码
}

其中,condition 是一个布尔表达式,可以是任何返回布尔值的表达式。如果表达式结果为 true,就执行大括号 {} 内的代码块;如果结果为 false,则跳过该代码块。

1.2 if-else 语句

如果条件不成立,else 语句将执行。else 是可选的,可以不使用。

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

这里,x 小于等于 10,所以将输出:x 小于或等于 10

1.3 if-else if-else 语句

当有多个条件需要判断时,可以使用 else if 来处理多个条件。每个 else if 后面都跟一个条件表达式,多个 else ifelse 语句可以组合在一起进行多分支判断。

x := 15
if x > 20 {fmt.Println("x 大于 20")
} else if x == 15 {fmt.Println("x 等于 15")
} else {fmt.Println("x 小于 15")
}

输出是:x 等于 15,因为 x 等于 15。

1.4 简短声明和初始化

Go 语言的 if 语句支持在条件判断语句中声明和初始化变量。这通常用于减少作用域的范围,避免在函数的其他地方污染变量。

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

在这个例子中,x 被声明并初始化为 10,然后判断 x > 5,因为条件为真,所以打印 x 大于 5。注意 x 的作用域只限于 if 语句块内部。

1.5 多个条件的逻辑运算

我们可以使用 &&(逻辑与)和 ||(逻辑或)在 if 条件中组合多个判断。

x := 7
y := 10
if x > 5 && y < 15 {fmt.Println("x 大于 5 且 y 小于 15")
}if x > 10 || y > 5 {fmt.Println("x 大于 10 或者 y 大于 5")
}

2. switch 语句

switch 语句用于根据不同的条件选择不同的执行路径。它比多个 if-else 语句更简洁,特别是当需要进行多重判断时。

2.1 基本语法

switch expression {
case value1:// 如果 expression == value1,执行此块代码
case value2:// 如果 expression == value2,执行此块代码
default:// 如果没有匹配的值,执行此块代码
}
  • expression 是要检查的表达式,可以是常量、变量、函数调用等。
  • case 后面是要与 expression 比较的值。只有 expression 的值与某个 case 的值相等时,才会执行该 case 对应的代码块。
  • default 是可选的,如果没有任何 case 匹配,执行 default 的代码。

2.2 示例

day := 3
switch day {
case 1:fmt.Println("星期一")
case 2:fmt.Println("星期二")
case 3:fmt.Println("星期三")
default:fmt.Println("未知的星期")
}

根据 day 的值选择执行不同的代码块。如果 day 为 3,输出 星期三

2.3 switch 语句与 if 的对比

switch 在多个条件判断时通常比多个 if-else 更清晰。例如,下面的 if-else 语句可以用 switch 改写得更简洁:

x := 10
if x == 1 {fmt.Println("x 等于 1")
} else if x == 2 {fmt.Println("x 等于 2")
} else if x == 3 {fmt.Println("x 等于 3")
} else {fmt.Println("x 不是 1、2 或 3")
}

可以用 switch 改写成:

switch x {
case 1:fmt.Println("x 等于 1")
case 2:fmt.Println("x 等于 2")
case 3:fmt.Println("x 等于 3")
default:fmt.Println("x 不是 1、2 或 3")
}

2.4 不指定表达式

如果 switch 后面不指定表达式,Go 会默认每个 casetrue 进行比较。这意味着所有的 case 都是布尔表达式。

x := 10
switch {
case x > 5:fmt.Println("x 大于 5")
case x == 10:fmt.Println("x 等于 10")
default:fmt.Println("x 小于 5")
}

这个例子相当于多个 if-else 语句,首先判断 x > 5 是否为真,然后判断 x == 10 是否为真。

2.5 fallthrough 语句

Go 的 switch 语句在匹配一个 case 后默认会终止,不会继续执行下面的 case。如果希望继续执行下一个 case,需要使用 fallthrough 语句。

switch day := 2; day {
case 1:fmt.Println("星期一")fallthrough
case 2:fmt.Println("星期二")fallthrough
case 3:fmt.Println("星期三")
}

在这个例子中,不管 day 是 1、2 还是 3,都会依次打印出所有的匹配项。注意,fallthrough 会强制跳过条件判断,继续执行下一个 case

2.6 case 支持多个值

Go 的 case 支持用逗号分隔多个值进行匹配,相当于多个条件判断。

x := 2
switch x {
case 1, 2, 3:fmt.Println("x 是 1、2 或 3")
default:fmt.Println("x 不是 1、2 或 3")
}

这里,case 1, 2, 3 等价于 case 1: case 2: case 3:,所以会输出 x 是 1、2 或 3

3. 总结

  • if 语句:适用于少数条件判断。通过简单的布尔判断或 else if 可以实现多重条件判断。
  • switch 语句:适用于多个条件判断,特别是当需要对多个常量或变量进行匹配时。switch 语句的可读性高,避免了多个 if-else 的繁琐和混乱。
  • fallthrough:允许在匹配到某个 case 后继续执行下一个 case,这是 Go 语言 switch 特有的特性。
  • switch 无表达式:可以像一系列 if-else 语句一样工作,不需要指定一个常量表达式。

相关文章:

讲解Golang选择语句

Golang选择语句 1. if 语句1.1 基本语法1.2 if-else 语句1.3 if-else if-else 语句1.4 简短声明和初始化1.5 多个条件的逻辑运算 2. switch 语句2.1 基本语法2.2 示例2.3 switch 语句与 if 的对比2.4 不指定表达式2.5 fallthrough 语句2.6 case 支持多个值 3. 总结 Go语言中的选…...

练习LabVIEW第四十一题

学习目标&#xff1a; 编写一个程序测试自己在程序前面板上输入一段文字“CSDN是一个优秀的网站”所用的时间。 开始编写&#xff1a; 前面板放置一个数值显示控件&#xff0c;程序框图添加顺序结构共三帧&#xff0c;第一帧放一个获取日期/时间&#xff08;秒&#xff09;函…...

应对AI与机器学习的安全与授权管理新挑战,CodeMeter不断创新引领保护方案

人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术正在快速发展&#xff0c;逐渐应用到全球各类主流系统、设备及关键应用场景中&#xff0c;尤其是在政府、商业和工业组织不断加深互联的情况下&#xff0c;AI和ML技术的影响日益广泛。虽然AI技术的…...

【2024最新版Kotlin教程】Kotlin第一行代码系列第五课-类继承,抽象类,接口

【2024最新版Kotlin教程】Kotlin第一行代码系列第五课-类继承&#xff0c;抽象类&#xff0c;接口 为什么要有继承呢&#xff0c;现实中也是有继承的&#xff0c;对吧&#xff0c;你继承你爸的遗产&#xff0c;比如你爸建好了一个房子&#xff0c;儿子继承爸&#xff0c;就得了…...

虚拟现实和增强现实技术,如何打造沉浸式体验?

内容概要 在这个科技飞速发展的时代&#xff0c;虚拟现实&#xff08;VR&#xff09;与增强现实&#xff08;AR&#xff09;技术的结合就像调皮的小精灵&#xff0c;一下子把我们的生活变得神奇又有趣。想象一下&#xff0c;你正在游戏中与精灵搏斗&#xff0c;突然间身边的客…...

ChatGPT任务设计和微调策略的优化

目录 ChatGPT任务设计和微调策略的优化 一、GPT-3的基础 二、任务设计和微调策略的优化 三、基于人类反馈的强化学习(RLHF) 举例 完全注意力机制的自回归解码器网络 一、定义与原理 二、举例说明 ChatGPT任务设计和微调策略的优化 ChatGPT确实是从GPT-3开始,通过任…...

通过 SSH 连接远程 Ubuntu 服务器

目录 安装 SSH 服务器允许 SSH 通过防火墙远程 SSH 连接&#xff08;选&#xff09;重启向日葵 安装 SSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server检查 SSH 服务器状态 sudo systemctl status ssh如果 SSH 服务器正在运…...

Perl 环境安装

Perl 环境安装 Perl 是一种广泛使用的高级、通用、解释型、动态编程语言。它最初由 Larry Wall 在 1987 年设计,现在由 Perl 5 和 Perl 6 两个主要版本组成。Perl 适合于多种编程任务,包括系统管理、Web 开发、网络编程、游戏开发等。在开始使用 Perl 进行编程之前,您需要在…...

【NOIP提高组】引水入城

【NOIP提高组】引水入城 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 在一个遥远的国度&#xff0c;一侧是风景秀美的湖泊&#xff0c;另一侧则是漫无边际的沙漠。该国的行政 区划十分特殊&#xff0c;刚好构成一个N行M列的矩形&#xff…...

openvino python推理demo

openvino python推理demo import openvino from openvino.runtime import Core import numpy as np import argparse import hashlib import os import ioclass OpenvinoInfer:def __init__(self,device_id0):self.device_iddevice_idself.ie Core()self.available_devices …...

JavaWeb项目-----博客系统

一.设计数据库 1.创建数据库 create database if not exists java108_blog_system character set utf8; drop table if exists user; drop table if exists blog;2.创建博客列表 create table blog(blogId int primary key auto_increment,title varchar(20),content varcha…...

GY-56 (VL53L0X) 激光测距

文章目录 一、GY-56 简介二、引脚功能三、通信协议1.串口协议&#xff1a; 当 GY-56 PS 焊点开放时候使用(默认)&#xff08;1&#xff09;串口通信参数&#xff08;默认波特率值 9600bps&#xff09;&#xff08;2&#xff09;模块输出格式&#xff0c;每帧包含 8-13 个字节&a…...

当今陪玩系统小程序趋势,陪玩系统源码搭建后的适用于哪些平台

一、市场规模持续扩大 随着全球游戏市场的不断膨胀&#xff0c;游戏陪玩行业正逐渐从一个新兴领域成长为游戏产业链中不可或缺的一环。据《2024年1~6月中国游戏产业报告》显示&#xff0c;今年上半年&#xff0c;国内游戏市场实际销售收入达到1472.67亿元&#xff0c;同比增长…...

qt QListWidget详解

1、概述 QListWidget 是 Qt 框架中的一个类&#xff0c;它提供了一个基于模型的视图&#xff0c;用于显示项目的列表。QListWidget 继承自 QAbstractItemView 并为项目列表提供了一个直观的接口。与 QTreeView 和 QTableView 不同&#xff0c;QListWidget 是专门为单行或多行项…...

java ssm 校园快递物流平台 校园快递管理系统 物流管理 源码 jsp

一、项目简介 本项目是一套基于SSM的校园快递物流平台&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#x…...

西安电子科技大学考研网报审核通过了,然后呢?

报考西安电子科技大学的宝贝们&#xff0c;考研网上确认已经截止的同学们&#xff0c;不用担心&#xff01; 最近&#xff0c;有很多同学问到一个问题&#xff1a;网上确认时看到有消息说禁止使用海马体照片&#xff0c;但我明明用了海马体的照片&#xff0c;审核却通过了&…...

pandas习题 051:将字符串数据读取到 DataFrame

编码题)有以下逗号隔开和空格隔开的字符串数据,如何将它读取为 DataFrame ? data = ‘’’ a,b,c 1,3,4 2,4,5 ‘’’ data2 = ‘’’ a b c 1 13 214 2 4 15 ‘’’ Python 代码如下:import pandas as pd import iodata = a,b,c 1,3,4 2,4,5 df = pd.read_csv(io.Stri…...

改进探路者算法复现

本文所涉及所有资源均在 传知代码平台 可获取。 目录 一、背景及意义介绍 (一)背景 ࿰...

PostgreSQL 学习笔记:PostgreSQL 主从复制

PostgreSQL 笔记&#xff1a;PostgreSQL 主从复制 博客地址&#xff1a;TMDOG 的博客 在现代应用程序中&#xff0c;数据库的高可用性和扩展性是至关重要的。PostgreSQL 提供了主从复制功能&#xff0c;可以在多个数据库实例之间复制数据&#xff0c;以实现冗余和负载均衡。本…...

【系统架构设计师(第2版)】十一、未来信息综合技术

未来信息综合技术是指近年来新技术发展而提出的一些新概念、新知识、新产品&#xff0c;主要包括信息物理系统&#xff08;CPS&#xff09;、人工智能&#xff08;AI&#xff09;、机器人、边缘计算、数字孪生、云计算和大数据等技术。这些技术涉及多学科、多领域&#xff0c;具…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...