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语句(不常用…...

L30.【LeetCode笔记】设计链表
1.题目 707. 设计链表 - 力扣(LeetCode) 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向…...

java日志框架详解-Log4j2
一、概述 Apache Log4j 2 (Log4j – Apache Log4j 2)是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并参考了Logback中优秀的设计,同时修复了Logback架构中的一些问题。被誉为是目前最优秀的Java日志框架&#x…...

C++中vector追加vector
在C中,如果你想将一个vector追加到另一个vector的后面,可以使用std::vector的成员函数insert或者std::copy,或者简单地使用std::vector的push_back方法逐个元素添加。这里我将展示几种常用的方法: 方法1:使用insert方…...

加一(66)
66. 加一 - 力扣(LeetCode) 解法: class Solution { public:vector<int> plusOne(vector<int>& digits) {bool plus_one true;for (int i digits.size() - 1; i > 0; --i) {if (plus_one) {int tmp digits[i] 1;if …...

远程连接-简化登录
vscode通过ssh连接远程服务器免密登录(图文)_vscode ssh-CSDN博客...

canvas的基本用法
canvas canvas元素简介 1.是个container元素<canvas width100 height100></canvas>,有开闭标签 2.有且只有width和height两个attribute,不需要写单位 canvas的基本使用 const canvasEl document.getElementById(canvas01) const ctx …...

Tailwind CSS - Tailwind CSS 引入(安装、初始化、配置、引入、构建、使用 Tailwind CSS)
一、Tailwind CSS 概述 Tailwind CSS 是一个功能优先的 CSS 框架,它提供了大量的实用类(utility classes),允许开发者通过组合这些类来快速构建用户界面 Tailwind CSS 与传统的 CSS 框架不同(例如,Bootstr…...

鸿蒙开发黑科技“stack叠层”替代customdialog
前一篇提到的问题,本篇博文提出了一个解决方案: arkui-x LongPressGesture触发customdialog踩坑记录-CSDN博客 前一段时间遇到的这个问题,通过排除法观察,锁定为customdialog组件有bug,极为容易挂死。不论如何调整使用方法,都还是会触发挂死。 反馈给arkui团队,说是在…...

FreeRTOS从入门到精通 第十五章(事件标志组)
参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 (1)事件标志位是一个“位”,用来表示事件是否发生。 (2)事件标志组是一组事件标志位的集合&#x…...

智慧园区管理平台实现智能整合提升企业运营模式与管理效率
内容概要 在当今数字化的背景下,智慧园区管理平台正逐渐成为企业提升运营效率和管理模式的重要工具。这个平台汇聚了多种先进技术,旨在通过智能整合各类资源与信息,帮助企业实现全面的管理创新。 智慧园区管理平台不仅仅是一个数据处理工具…...
markdown公式特殊字符
个人学习笔记 根号 在 Markdown 中,要表示根号 3,可以使用 LaTeX 语法来实现。常见的有以下两种方式: 行内公式形式:使用一对美元符号 $ 将内容包裹起来,即 $\sqrt{3}$ ,在支持 LaTeX 语法渲染的 Markdow…...

【深度分析】微软全球裁员计划不影响印度地区,将继续增加当地就业机会
当微软的裁员刀锋掠过全球办公室时,班加罗尔的键盘声却愈发密集——这场资本迁徙背后,藏着数字殖民时代最锋利的生存法则。 表面是跨国公司的区域战略调整,实则是全球人才市场的地壳运动。微软一边在硅谷裁撤年薪20万美金的高级工程师&#x…...

学习数据结构(5)单向链表的实现
(1)头部插入 (2)尾部删除 (3)头部删除 (4)查找 (5)在指定位置之前插入节点 (6)在指定位置之后插入节点 (7)删除…...

刷题记录 HOT100回溯算法-5:22. 括号生成
题目:22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:["((()))","(()())","(())()",…...

Keepalived高可用集群企业应用实例二
一、实现ipvs的高可用性 ipvs相关配置 虚拟服务器配置结构: virtual_server ip port { …… real_server { …… } real_server { …… } } virtual server (虚拟服务器)的定义格式 virtual_server ip port 定义虚拟主机ip地址及其端口 virtual_server …...

C++计算特定随机操作后序列元素乘积的期望
有一个长度为 n n n的序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an。初始序列的所有元素均为 0 0 0。再给定正整数 m m m、 c c c和 ( n − m 1 ) (n-m1) (n−m1)个正整数 b 1 , b 2 , . . . , b n − m 1 b_1,b_2,...,b_{n-m1} b1,b2,...,bn−m1…...

c++字母大小写转换
可以通过标准库中的 <algorithm> 和 <cctype> 头文件来实现大小写转换。以下是常用的方法: 1. 使用 std::transform 和 std::toupper/std::tolower 1.1 转换为大写 #include <iostream> #include <string> #include <algorithm> //…...

MySQL知识点总结(十六)
请说明在复制拓扑中,中继日志集和从属服务器状态日志的作用。 中继日志用来保存从主服务器接受的二进制日志,与二进制日志相同的格式存储,由服务器自动管理,在其全部内容重放后会自动删除。 从属服务器状态日志存储关于如何连接…...

Windows程序设计10:文件指针及目录的创建与删除
文章目录 前言一、文件指针是什么?二、设置文件指针的位置:随机读写,SetFilePointer函数1.函数说明2.函数实例 三、 目录的创建CreateDirectory四、目录的删除RemoveDirectory总结 前言 Windows程序设计10:文件指针及目录的创建与…...

geolocator包的功能和用法
文章目录 1 概念介绍2 使用方法3 示例代码4 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容,本章回中将介绍如何获取位置信息.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的获取位置信息本质上是获取当前手机所在位置的…...

Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

22.Word:小张-经费联审核结算单❗【16】
目录 NO1.2 NO3.4 NO5.6.7 NO8邮件合并 MS搜狗输入法 NO1.2 用ms打开文件,而不是wps❗不然后面都没分布局→页面设置→页面大小→页面方向→上下左右:页边距→页码范围:多页:拼页光标处于→布局→分隔符:分节符…...

Agent 高频知识汇总:查漏补缺参考大全
Agent 高频问题汇总 一、基础概念类 (一)请解释 Agent 的概念及其主要特点 Agent 是一种能够感知所处环境,并基于感知信息做出决策、采取行动以实现特定目标的实体。它既可以是简单的规则基系统,也能是复杂的智能体,…...

本地化部署DeepSeek-R1
本文环境搭建均基于免费工具,感谢开源。 一、下载工具并安装 1. Ollama:最新版本 0.5.7 官网在这里 https://ollama.com/download 但是下载太慢,得换个思路 https://sourceforge.net/projects/ollama.mirror/ 2.Chatbox https://cha…...

验证二叉搜索数(98)
98. 验证二叉搜索树 - 力扣(LeetCode) 解法: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …...

StarRocks BE源码编译、CLion高亮跳转方法
阅读SR BE源码时,很多类的引用位置爆红找不到,或无法跳转过去,而自己的Linux机器往往缺乏各种C依赖库,配置安装比较麻烦,因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器,进行编…...

数模测评:doubao1.5>deepseek-v3>gpt-o1
本次测试了当前评价最高的三款大模型doubao1.5、gpt-o1、deepseek-v3(r1崩溃),都是采用无提示词的硬核提问方式,测试视频如下。 gpto1、doubao1.5、deepseek测评 测试方式: 上传美赛六道题目文件 直接提问以下5句话: 这是一道数学…...

晴,初三,年已过
既然直播如此影响情绪,为什么还要直播?因为无聊?明明那么多事情可以打发时间。 真不想懂。 今日初三,昨天晚上小舅家聚,今天大舅家聚,计划明天小姨妈家聚。 今晚喝了点大舅哥哥泡的白葡萄酒,…...

Vue3 v-bind 和 v-model 对比
1. 基本概念 1.1 v-bind 单向数据绑定从父组件向子组件传递数据简写形式为 : 1.2 v-model 双向数据绑定父子组件数据同步本质是 v-bind 和 v-on 的语法糖 2. 基础用法对比 2.1 表单元素绑定 <!-- v-bind 示例 --> <template><input :value"text&quo…...