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

Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环

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.mzph.cn/pingmian/68707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想品客老师的第九天:原型和继承

原型与继承前置看这里 原型 原型都了解了&#xff0c;但是不是所有对象都有对象原型 let obj1 {}console.log(obj1)let obj2 Object.create(null, {name: {value: 荷叶饭}})console.log(obj2) obj2为什么没有对象原型&#xff1f;obj2是完全的数据字典对象&#xff0c;没有…

SpringBoot--基本使用(配置、整合SpringMVC、Druid、Mybatis、基础特性)

这里写目录标题 一.介绍1.为什么依赖不需要写版本&#xff1f;2.启动器(Starter)是何方神圣&#xff1f;3.SpringBootApplication注解的功效&#xff1f;4.启动源码5.如何学好SpringBoot 二.SpringBoot3配置文件2.1属性配置文件使用2.2 YAML配置文件使用2.3 YAML配置文件使用2.…

98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用

目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…

数据结构实战之线性表(一)

一.线性表的定义和特点 线性表的定义 线性表是一种数据结构&#xff0c;它包含了一系列具有相同特性的数据元素&#xff0c;数据元素之间存在着顺序关系。例如&#xff0c;26个英文字母的字符表 ( (A, B, C, ....., Z) ) 就是一个线性表&#xff0c;其中每个字母就是一个数据…

FreeRTOS学习 --- 中断管理

什么是中断&#xff1f; 让CPU打断正常运行的程序&#xff0c;转而去处理紧急的事件&#xff08;程序&#xff09;&#xff0c;就叫中断 中断执行机制&#xff0c;可简单概括为三步&#xff1a; 1&#xff0c;中断请求 外设产生中断请求&#xff08;GPIO外部中断、定时器中断…

Vue+Echarts 实现青岛自定义样式地图

一、效果 二、代码 <template><div class"chart-box"><chart ref"chartQingdao" style"width: 100%; height: 100%;" :options"options" autoresize></chart></div> </template> <script> …

嵌入式知识点总结 Linux驱动 (七)-Linux驱动常用函数 uboot命令 bootcmd bootargs get_part env_get

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.ioremap 2.open 3.read 4.write 5.copy_to_user 6.copy_from_user 7.总结相关uboot命令以及函数 1.bootcmd 1.1.NAND Flash操作命令 2.bootargs 2.1 root 2.2 rootf…

《STL基础之vector、list、deque》

【vector、list、deque导读】vector、list、deque这三种序列式的容器&#xff0c;算是比较的基础容器&#xff0c;也是大家在日常开发中常用到的容器&#xff0c;因为底层用到的数据结构比较简单&#xff0c;笔者就将他们三者放到一起做下对比分析&#xff0c;介绍下基本用法&a…

Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴

目录 背景 解决gpedit.msc打不开 解决复制粘贴 剪贴板的问题 启用远程桌面剪贴板与驱动器 重启RDP剪贴板监视程序 以上都不行&#xff1f;可能是操作被Win11系统阻止 最后 背景 远程桌面无法复制粘贴&#xff0c;需要查看下主机策略组设置&#xff0c;结果按WinR输入…

高精度加法乘法

高精度加法&乘法都是把数字转化成数组进行运算&#xff0c;存储 高精度加法 建议多在纸上画画&#xff0c;梳理思路 代码实现 输入字符串 //初始化数组存储 int a[250]{0}; int b[250]{0}; int c[251]{0}; //定义字符串&#xff0c;输入字符串 string s1,s2; getline(c…

Python 列表思维导图

Python 列表思维导图 腾讯云盘下载连接 https://share.weiyun.com/Ri6bUJed

获取snmp oid的小方法1(随手记)

snmpwalk遍历设备的mib # snmpwalk -v <SNMP version> -c <community-id> <IP> . snmpwalk -v 2c -c test 192.168.100.201 .根据获取的值&#xff0c;找到某一个想要的值的oid # SNMPv2-MIB::sysName.0 STRING: test1 [rootzabbix01 fonts]# snmpwalk -v…

【leetcode练习·二叉树】计算完全二叉树的节点数

本文参考labuladong算法笔记[拓展&#xff1a;如何计算完全二叉树的节点数 | labuladong 的算法笔记] 如果让你数一下一棵普通二叉树有多少个节点&#xff0c;这很简单&#xff0c;只要在二叉树的遍历框架上加一点代码就行了。 但是&#xff0c;力扣第第 222 题「完全二叉树的…

WebStorm安装及配置迁移

一、安装 官方下载安装包 WebStorm&#xff1a;JetBrains 出品的 JavaScript 和 TypeScript IDE 适用于2024版本及以下 按需安装后重启电脑 运行WebStorm,注意不要选择大陆地区&#xff0c;语言不选择中文&#xff0c;运行激活文件 二、配置迁移 根据已有软件导出相关配置…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代&#xff0c;ARM&#xff08;Advanced RISC Machines&#xff09;处理器凭借其高性能、低功耗的特性&#xff0c;成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集&#xff08;RISC&#xff09;的典范&#xff0c;ARM核…

离线大模型-通义千问

关部署离线模型的教程就不写了&#xff0c;百度一搜一大堆 Kamailio介绍 1. Kamailio介绍 user: 您了解kamailio吗&#xff1f;assistant: 是的&#xff0c;我了解Kamailio。Kamailio是一个开源的SIP服务器和代理&#xff0c;用于处理VoIP&#xff08;Voice over Internet…

Hypium+python鸿蒙原生自动化安装配置

Hypiumpython自动化搭建 文章目录 Python安装pip源配置HDC安装Hypium安装DevEco Testing Hypium插件安装及使用方法​​​​​插件安装工程创建区域 Python安装 推荐从官网获取3.10版本&#xff0c;其他版本可能出现兼容性问题 Python下载地址 下载64/32bitwindows安装文件&am…

细说机器学习算法之ROC曲线用于模型评估

系列文章目录 第一章&#xff1a;Pyhton机器学习算法之KNN 第二章&#xff1a;Pyhton机器学习算法之K—Means 第三章&#xff1a;Pyhton机器学习算法之随机森林 第四章&#xff1a;Pyhton机器学习算法之线性回归 第五章&#xff1a;Pyhton机器学习算法之有监督学习与无监督…

ROS_noetic-打印hello(√)

笔者创建的路径如下 进入到src&#xff0c; catkin_create_pkg helloworld roscpp rospy std_msgs Helloworld-C hello_C.cpp #include "ros/ros.h" int main(int argc, char *argv[]) { //执行 ros 节点初始化 ros::init(argc,argv,"hello"); //创…

冲刺蓝桥杯之速通vector!!!!!

文章目录 知识点创建增删查改 习题1习题2习题3习题4&#xff1a;习题5&#xff1a; 知识点 C的STL提供已经封装好的容器vector&#xff0c;也可叫做可变长的数组&#xff0c;vector底层就是自动扩容的顺序表&#xff0c;其中的增删查改已经封装好 创建 const int N30; vecto…