Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别

devtools/2025/2/2 6:47:20/

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
}
break运行结果

(2)使用continue:

package main//import "fmt"func main() {//break //break is not in a loop, switch, or selectcontinue  //  continue is not in a loop
}
continue运行结果

(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")}
goto运行结果

6. 补充break和continue

  • break 跳出当前循环;
  • continue 跳过本次循环;
  • 注意:break 可用于 for、 switch、 select,而continue 仅能用于for 循环
  • goto 可以用在任何地方,但是不能跨函数使用。


http://www.ppmy.cn/devtools/155367.html

相关文章

Spring WebFlux揭秘:下一代响应式编程框架,与Spring MVC有何不同?

Spring WebFlux和Spring MVC都是Spring家族里的成员&#xff0c;它们都能帮助我们开发Web应用&#xff0c;但工作方式有所不同。 可以把Spring MVC想象成一个服务员&#xff0c;每次有客人&#xff08;请求&#xff09;来&#xff0c;它就会专门找一个服务员&#xff08;线程&a…

No.8十六届蓝桥杯备战|C++输入输出|printf|scanf(C++)

scanf和printf scanf() 和 printf() 是属于C语⾔的库函数&#xff0c;C是兼容C语⾔的&#xff0c;所以C中只要正确包含头⽂件也可以正常使⽤这两个函数。⽽且这两个函数在算法竞赛题⽬中使⽤的⾮常频繁&#xff0c;尤其是在输出格式控制中。 printf printf() 函数原型如下&a…

MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式

MySQL基本架构图&#xff1a; MySQL主要分为Server层和存储引擎层 Server层&#xff1a; 连接器&#xff1a;连接客户端&#xff0c;获取权限&#xff0c;管理连接 查询缓存&#xff08;可选&#xff09;&#xff1a;在执行查询语句之前会先到查询缓存中查看是否执行过这条语…

【Redis】List 类型的介绍和常用命令

1. 介绍 Redis 中的 list 相当于顺序表&#xff0c;并且内部更接近于“双端队列”&#xff0c;所以也支持头插和尾插的操作&#xff0c;可以当做队列或者栈来使用&#xff0c;同时也存在下标的概念&#xff0c;不过和 Java 中的下标不同&#xff0c;Redis 支持负数下标&#x…

数据结构:二叉树—面试题(二)

1、二叉树的最近公共祖先 习题链接https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/ 描述&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点…

第38周:猫狗识别 (Tensorflow实战第八周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…

Python 类型注解

文章目录 Python 类型注解详解1. 引言2. Python 类型注解基础2.1 变量类型注解2.2 函数参数和返回值注解2.3 typing 模块的支持 3. 进阶&#xff1a;复杂数据类型3.1 可选类型&#xff08;Optional&#xff09;3.2 联合类型&#xff08;Union&#xff09;3.3 泛型&#xff08;G…

基于Flask的旅游系统的设计与实现

【Flask】基于Flask的旅游系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为后端开发语言&#xff0c;结合前端Bootstrap框架&#xff0c;为用户提供了丰富…