Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。
目录
1. if 语句
2. switch语句
3. for语句
4. range语句
5. goto语句(不常用)
6. 补充break和continue
1. if 语句
语法格式:
(1)单分支:
if 条件语句 {
...
}
或者
if 变量初始化; 条件语句{
...
}
(2)多分支:if...else 或者 if ... elseif ...else
多分支的语法格式参照简单示例。
- if 语句是一种选择结构;
- Go语言中,if 判断条件的 条件表达式没有括号;
- if 语句 支持1个初始化表达式,初始化语句和条件表达式之间需要用分号分隔;
- if 语句程序体{...} 中的左括号{ 和 if 要在同一行;
- else 后面没有条件
简单示例:
- 示例1:单分支
package mainimport "fmt"func main() {s := "苹果"//if和{就是条件,条件通常就是关系运算符//if 判断条件的 条件表达式没有括号if s == "橘子" { //左括号和 if 要在同一行fmt.Println("橘子,不是苹果")}//if 语句 支持1个初始化语句,初始化语句和判断条件以分号分隔if a := 10; a == 10 { //条件为真,指向{}fmt.Println("a==10")}}
输出结果:

- 示例2:多分支
package mainimport "fmt"func main() {//第1种写法a := 10if a == 10 {fmt.Println("a == 10")} else { //else后面没有条件fmt.Println("a != 10")}//第2种写法if a := 10; a == 10 {fmt.Println("a == 10")} else { //else后面没有条件fmt.Println("a != 10")}//第3种写法,多分支a = 8if a == 10 {fmt.Println("a == 10")} else if a > 10 {fmt.Println("a > 10")} else if a < 10 {fmt.Println("a < 10")} else {fmt.Println("这是不可能的")}//第4种写法,多分支if a := 8; a == 10 {fmt.Println("a == 10")} else if a > 10 {fmt.Println("a > 10")} else if a < 10 {fmt.Println("a < 10")} else {fmt.Println("这是不可能的")}}
输出结果:

2. switch语句
switch语句的语法格式参照简单示例代码中的格式。
- switch语句也是一种选择结构;
- switch后面写的是变量本身;
- switch语句中case最后可写可不写break,因为Go中默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch;
- 可以使用fallthrough强制执行后面的case代码;
- 可以使用任何类型或表达式作为条件语句;
- switch语句支持1个初始化语句,初始化语句和变量本身之间,需要用分号分隔,如示例2;
- switch语句后面 可以没有条件,而可以把条件放在case后面,如示例2;
- case后面可以跟多个值,如示例2;
简单示例:
(1)示例1:
package mainimport "fmt"func main() {//num := 1var num intfmt.Printf("请按下楼层:")fmt.Scan(&num)switch num { //switch后面写的是变量本身case 1:fmt.Println("按下的是1楼")//break //Go语言保留了break关键字,用于跳出switch语句,不写,默认就包含//fallthrough //不跳出switch语句,后面的无条件执行case 2:fmt.Println("按下的是2楼")//break//fallthroughcase 3:fmt.Println("按下的是3楼")//break//fallthroughcase 4:fmt.Println("按下的是4楼")//break//fallthroughdefault:fmt.Println("按下的是xxx楼")}
}
运行结果:
- 不使用fallthrough的运行结果:

- 使用fallthrough的运行结果:

(2)示例2:
package mainimport "fmt"func main() {//支持一个初始化语句,初始化语句和变量本身之间,需要用分号分隔switch num := 4; num { //switch后面写的是变量本身case 1:fmt.Println("按下的是1楼")case 2:fmt.Println("按下的是2楼")case 3, 4, 5:fmt.Println("按下的是yyy楼")case 6:fmt.Println("按下的是6楼")default:fmt.Println("按下的是xxx楼")}score := 85switch { //可以没有条件case score > 90: //case后面可以放条件fmt.Println("优秀")case score > 80: //case后面可以放条件fmt.Println("良好")case score > 70: //case后面可以放条件fmt.Println("一般")default:fmt.Println("其它")}
}
运行结果:

3. for语句
Go中for语句格式与C/C++中的 for语句格式类似,其语法格式为:
for 初始化条件; 判断条件; 条件变化{
}
- i++ 只有后置,没有前置,即Go中不存在 ++i,只有 i++;
简单示例:实现1+2+3+...+100累加运算
package mainimport "fmt"func main() {// for 初始化条件; 判断条件; 条件变化{// }//实现1+2+3+...+100累加运算//1) 初始化条件 i := 1//2) 判断条件是否为真,i <= 100,如果为真,执行循环体,如果为假,跳出循环//3) 条件变化 i++ //4) 重复 2,3,4sum := 0for i := 1; i <= 100; i++ {sum = sum + i}fmt.Println("sum = ", sum)}
运行结果:

4. range语句
- 用于迭代。
- 关键词range会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值。
- 支持 string / array / slice / map。
- 可忽略某个返回值。
- 语法格式可参照:


简单示例代码:
package mainimport "fmt"func main() {str := "abc"/*打印每个字符*///1.传统写法:通过for打印每个字符for i := 0; i < len(str); i++ {fmt.Printf("str[%d] = %c\n", i, str[i])}//2.借助range,迭代打印每个元素,默认返回2个值:一个是元素的值,一个是元素本身for i, data := range str {fmt.Printf("str[%d] = %c\n", i, data)}//2.1 丢弃第2个返回值的第一种写法for i := range str { //第2个返回值,默认丢弃,即返回元素的位置(下标)fmt.Printf("str[%d] = %c\n", i, str[i])}//2.2 丢弃第2个返回值的第二种写法,等价于第一种写法for i, _ := range str { //第2个返回值,默认丢弃,即返回元素的位置(下标)fmt.Printf("str[%d] = %c\n", i, str[i])}}
运行结果:

5. goto语句(不常用)
语法格式:
goto 标签
...
标签 :
...
- goto 可以用在任何地方,但是不能跨函数使用;
- 用 goto 跳转到标签, 从标签处,执行代码;
- 标签 必须在当前函数内定义;
- 用法参考简单示例:
简单示例:
(1)使用break:
package main//import "fmt"func main() {break //break is not in a loop, switch, or select
}
(2)使用continue:
package main//import "fmt"func main() {//break //break is not in a loop, switch, or selectcontinue // continue is not in a loop
}
(3) 使用goto:
package mainimport "fmt"func main() {//break //break is not in a loop, switch, or select// continue // continue is not in a loop//goto 可以用在任何地方,但是不能跨函数使用fmt.Println("111111111111111111")goto End //goto是关键字, End是用户起的名字,叫做标签fmt.Println("2222222222222222222")End:fmt.Println("3333333333333333333")}
6. 补充break和continue
- break 跳出当前循环;
- continue 跳过本次循环;
- 注意:break 可用于 for、 switch、 select,而continue 仅能用于for 循环。
- goto 可以用在任何地方,但是不能跨函数使用。
相关文章:
Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...
Java中初步使用websocket(springBoot版本)
一、什么是websocket WebSocket是一种在Web应用程序中实现实时双向通信的协议。它为浏览器和服务器之间提供了一种持久连接,在一个连接上可以双向传输数据。相比传统的HTTP协议,WebSocket具有更低的延迟和更高的效率。 WebSocket使用了类似于握手的方式来…...
Day50:字典的合并
在 Python 中,字典是一个可变的数据类型,经常需要将多个字典合并成一个字典。合并字典的方式有多种,今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…...
14-8C++STL的queue容器
一、queue容器 (1)queue容器的简介 queue为队列容器,“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…...
C++范围for和auto关键字
这里写目录标题 一.范围for的介绍与使用模版:⽰例:打印数组2. 方法如下⽰例:打印数组二.auto 关键字一.范围for的介绍与使用 模版: for ( 类型 变量名 : 数组名 )语句 //多条语句需要加⼤括号 ⽰例:打印数组 #include <iostream> using namespace std; int main()…...
【B站保姆级视频教程:Jetson配置YOLOv11环境(四)cuda cudnn tensorrt配置】
Jetson配置YOLOv11环境(4)cuda cudnn tensorrt配置 文章目录 0. 简介1. cuda配置:添加cuda环境变量2. cudnn配置3. TensorRT Python环境配置3.1 系统自带Python环境中的TensorRT配置3.2 Conda 虚拟Python环境中的TensorRT配置 0. 简介 官方镜…...
信号模块--simulink操作
位置simulink/sourses 常用的模块 功能:常数模块,提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置(例三维数据设置) 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度,0到…...
强化学习笔记(3)——基于值函数的方法和策略梯度方法
分为两大类方法: 基于值函数的方法(Temporal Difference Methods, TD Methods) 策略梯度方法(Policy Gradient Methods)。 二者不同之处: 通过值函数来间接表达隐式的策略,一个是直接迭代优化策…...
新年新挑战:如何用LabVIEW开发跨平台应用
新的一年往往伴随着各种新的项目需求,而跨平台应用开发无疑是当前备受瞩目的发展趋势。在众多开发工具中,LabVIEW 以其独特的图形化编程方式和强大的功能,为开发跨平台应用提供了有效的途径。本文将深入探讨如何运用 LabVIEW 开发能够在不同操…...
事务04之死锁,锁底层和隔离机制原理
死锁和事务底层原理 文章目录 死锁和事务底层原理一:MySQL中的死锁现象1:何为死锁1.1:死锁的概念1.2:死锁产生的四个必要条件: 2:MySQL的死锁2.1:死锁的触发2.2:MySQL的死锁如何解决…...
第05章 17 Contour 过滤器介绍与例子
vtkContourFilter 是 VTK(Visualization Toolkit)中的一个关键类,用于从输入数据生成等值线或等值面。它是基于阈值的过滤器,可以从标量字段中提取等值线或等值面。vtkContourFilter 的核心功能是根据用户指定的值生成等值线或等值…...
Golang 并发机制-2:Golang Goroutine 和竞争条件
在今天的软件开发中,我们正在使用并发的概念,它允许一次执行多个任务。在Go编程中,理解Go例程是至关重要的。本文试图详细解释什么是例程,它们有多轻,通过简单地使用“go”关键字创建它们,以及可能出现的竞…...
【4Day创客实践入门教程】Day0 创想启程——课程与项目预览
Day0 创想启程——课程与项目预览 目录 Day0 创想启程——课程与项目预览前言学习内容基本的单片机开发技能简单的焊接技能简单的MicroPython程序 后记 Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机与MicroPython初步Day3 实战演练——桌面迷你番茄钟Day4 迈…...
洛谷P3372 【模板】线段树 1以及分块
【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。 …...
(动态规划基础 打家劫舍)leetcode 198
已知h2和h1,用已知推出未知 推是求答案,回溯是给答案 这里图片给出dfs暴力,再进行记录答案完成记忆化搜索,再转为dp数组 #include<iostream> #include<vector> #include<algorithm> //nums:2,1,1,2 //dp:2,2,…...
Python 梯度下降法(四):Adadelta Optimize
文章目录 Python 梯度下降法(四):Adadelta Optimize一、数学原理1.1 介绍1.2 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法(四):Adadelta Opt…...
旅行的意义:“诗与远方”和在旅途中找寻真我
原文链接:旅行的意义:“诗与远方”和在旅途中找寻真我 困在格子间,心向远方 清晨,闹钟催促,打工人挣扎起床出门。地铁拥挤,工作繁忙,加班成常态,下班时夜幕已深,满心疲惫…...
leetcode——将有序数组转化为二叉搜索树(java)
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答…...
6 齐次坐标模块(homogen.rs)
homogen.rs代码定义了一个名为 HomogeneousVector 的结构体,它是用于表示三维空间中的齐次向量。齐次向量常用于计算机图形学和几何学中,特别是在处理投影和变换时。下面是对这段代码的详细解释和一些关键的代码片段分析: 一、homogen.rs文件…...
007 JSON Web Token
文章目录 https://doc.hutool.cn/pages/jwt/#jwt%E4%BB%8B%E7%BB%8D JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。这个标准由互联网工程任务组(IETF)发表,定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。…...
Cursor 背后的技术栈:从 VS Code 到 AI 集成
引言 在当今快速发展的软件开发领域,开发者工具正在经历一场由人工智能(AI)驱动的革命。Cursor 作为一款新兴的智能编程助手,凭借其强大的 AI 能力和高效的开发体验,迅速吸引了大量开发者的关注。Cursor 不仅继承了 V…...
【Python蓝桥杯备赛宝典】
文章目录 一、基础数据结构1.1 链表1.2 队列1.3 栈1.4 二叉树1.5 堆二、基本算法2.1 算法复杂度2.2 尺取法2.3 二分法2.4 三分法2.5 倍增法和ST算法2.6 前缀和与差分2.7 离散化2.8 排序与排列2.9 分治法2.10贪心法1.接水时间最短问题2.糖果数量有限问题3.分发时间最短问题4.采摘…...
前端js高级25.1.30
原型:函数的组成结构 通过这个图我们需要知道。 假设我们创建了一个Foo函数。 规则:Function.protoType是函数显示原型。__proto__是隐式对象。 Function、Object、Foo函数的__proto__指向了Function.protoType说明。这三个都依托function函数来创建。…...
【后端开发】字节跳动青训营之性能分析工具pprof
性能分析工具pprof 一、测试程序介绍二、pprof工具安装与使用2.1 pprof工具安装2.2 pprof工具使用 资料链接: 项目代码链接实验指南pprof使用指南 一、测试程序介绍 package mainimport ("log""net/http"_ "net/http/pprof" // 自…...
云原生(五十二) | DataGrip软件使用
文章目录 DataGrip软件使用 一、DataGrip基本使用 二、软件界面介绍 三、附件文件夹到项目中 四、DataGrip设置 五、SQL执行快捷键 DataGrip软件使用 一、DataGrip基本使用 1. 软件界面介绍 2. 附加文件夹到项目中【重要】 3. DataGrip配置 快捷键使用:C…...
FreeRTOS学习 --- 任务调度
开启任务调度器 作用:用于启动任务调度器,任务调度器启动后, FreeRTOS 便会开始进行任务调度 该函数内部实现,如下: 1、创建空闲任务(优先级最低) 2、如果使能软件定时器,则创建定…...
2025年人工智能技术:Prompt与Agent的发展趋势与机遇
文章目录 一、Prompt与Agent的定义与区别(一)定义(二)区别二、2025年Prompt与Agent的应用场景(一)Prompt的应用场景(二)Agent的应用场景三、2025年Prompt与Agent的适合群体(一)Prompt适合的群体(二)Agent适合的群体四、2025年Prompt与Agent的发展机遇(一)Prompt的…...
区块链 智能合约安全 | 回滚攻击
视频教程在我主页简介和专栏里 目录: 智能合约安全 回滚攻击 总结 智能合约安全 回滚攻击 回滚攻击的本质是”耍赖” 举一个简单的例子,两个人玩石头剪刀布,输了的给对方10块钱,现在A输了,A说这把不算,重来 放在Solidity中,require()函数会检测其中的条件是否满…...
【Go语言圣经】第六节:方法
第六章:方法 6.1 方法声明 在函数声明时,在其名字之前放上一个变量,这就是声明了变量对应类型的一个方法,相当于为这种类型定义了一个独占的方法。 下例为 Point 类型声明了计算两个点之间距离的方法: package mai…...
【JavaEE进阶】图书管理系统 - 壹
目录 🌲序言 🌴前端代码的引入 🎋约定前后端交互接口 🚩接口定义 🍃后端服务器代码实现 🚩登录接口 🚩图书列表接口 🎄前端代码实现 🚩登录页面 🚩…...
