Golang--流程控制

1、分支结构

1.1 if分支

单分支

语法:
if 条件表达式 {

  逻辑代码

}

  • 当条件表达式为true时,就会执行代码块的代码。
  • 条件表达式左右的()可以不写,也建议不写 
  • if和表达式中间,一定要有空格
  • 在Golang中,{}是必须有的,就算你只写一行代码。
  • 在golang里,if后面可以并列的加入变量的定义
package main  import (  "fmt"
)  func main() {  if true {fmt.Println("hello")}
}
package main  import (  "fmt"
)  func main() {  if a,b := 1,2; a < b {fmt.Println("hello")}
}

 双分支

正确语法​:

if 条件表达式 {

   逻辑代码1

} else {

   逻辑代码2

}

当条件表达式成立,即执行逻辑代码1,否则执行逻辑代码2。{}也是必须有的。

错误语法:

if 条件表达式 {

   逻辑代码1

}

else {

   逻辑代码2

​​​​​​

package main  import (  "fmt"
)  func main() {  if a,b := 10,20; a > b{fmt.Println("a > b")}else{fmt.Println("a < b")}
}

多分支

语法:

if 条件表达式1 {

    逻辑代码1

} else if 条件表达式2 {

    逻辑代码2

}

.......

else {

 逻辑代码n

}
 

package main  import (  "fmt"
)  func main() {  if a,b := 10,10; a > b{fmt.Println("a > b")}else if c := 100; a < c{fmt.Println("a < c")}else{fmt.Println("a == b")}
}

1.2 switch分支

 语法:

switch 表达式 {

  case 值1,值2,.….:

          语句块1

  case 值3,值4,...:

          语句块2

  ....

  default:

                          语句块

}


注意:

  • switch后的表达式可以是常量值、变量、一个有返回值的函数调用等*
  • case后面的值如果是常量值(字面量),则要求不能重复
  • case后的各个值的数据类型,必须和 switch 的表达式数据类型一致
  • case后面可以带多个值,使用逗号间隔。比如 case 值1,值2...*
  • case后面不需要带break* (C语言如果没有break,就会执行后面的case)
  • default语句不是必须的,位置也是随意的
  • switch后也可以不带表达式,当做if分支来使用*
  • switch后也可以直接声明/定义一个变量,分号结束,不推荐*
  • switch穿透,利用fallthrough关键字,如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透。
package main
import "fmt"
func main(){//实现功能:根据给出的学生分数,判断学生的等级:// >=90  -----A// >=80  -----B// >=70  -----C// >=60  -----D// <60   -----E//给出一个学生分数:var score int = 187//根据分数判断等级://switch后面是一个表达式,这个表达式的结果依次跟case进行比较,满足结果的话就执行冒号后面的代码。//default是用来“兜底”的一个分支,其它case分支都不走的情况下就会走default分支//default分支可以放在任意位置上,不一定非要放在最后。switch score/10 {case 10 :fmt.Println("您的等级为A级")case 9 :fmt.Println("您的等级为A级")case 8 :fmt.Println("您的等级为B级")case 7 :fmt.Println("您的等级为C级")case 6 :fmt.Println("您的等级为D级")case 5 :fmt.Println("您的等级为E级")case 4 :fmt.Println("您的等级为E级")case 3 :fmt.Println("您的等级为E级")case 2 :fmt.Println("您的等级为E级")case 1 :fmt.Println("您的等级为E级")case 0 :fmt.Println("您的等级为E级")default:fmt.Println("您的成绩有误")}}

2、循环结构

2.1 for循环

for循环语法:
 for 初始表达式; 布尔表达式; 迭代因子 {    //注意:这里迭代因子只能有一个
          循环体;
}


注意:

  1. for的初始表达式 不能用var定义变量的形式,要用:=
  2. for循环实际就是让程序员写代码的效率高了,但是底层该怎么执行还是怎么执行的,底层效率没有提高,只是程序员写代码简洁了而已
package main  import (  "fmt"
)  func main() {  for i,j := 1,2; i < 10 && j < 10; i++{fmt.Println(i * j)j++}
}

 for循环类似while的用法:

package main  import "fmt"  func main() {  i := 0  for i < 5 {  fmt.Println(i)  i++  }  
}

 for实现无线循环:

package main  import "fmt"  func main() {  i := 0  for {  if i >= 5 {  break  }  fmt.Println(i)  i++  }  
}

 2.2 for range

 for range结构是Go语言特有的一种的迭代结构,for range 可以遍历数组、切片、字符串、map 及通道,for range 语法上类似于其它语言中的 foreach 语句,一般形式为:
for key, val := range coll {
    ...
}

 

package main  import "fmt"  func main() {  // 遍历数组  arr := []int{1, 2, 3, 4, 5}  for i, v := range arr {  fmt.Printf("Index: %d, Value: %d\n", i, v)  }  // 遍历字符串  str := "hello"  for i, v := range str {  fmt.Printf("Index: %d, Character: %c\n", i, v)  }  
}

2.3 关键字

2.3.1 break

  • break可以结束正在执行的循环(break的作用结束离它最近的循环)
  • break 标签,结束指定标签对应的循环,可以做到一次跳出多重循环(注意:如果那个标签没有使用到 的话,那么标签不用加,否则报错:定义未使用)

没有使用标签(只跳出最近的一次循环):

package main
import "fmt"
func main(){//双重循环:for i := 1; i <= 5; i++ {for j := 2; j <= 4; j++ {fmt.Printf("i: %v, j: %v \n",i,j)if i == 2 && j == 2 {break}}}fmt.Println("-----ok")
}

使用标签(可以做到一次break跳出多层循环): 

package main
import "fmt"
func main(){//双重循环:label2:for i := 1; i <= 5; i++ {for j := 2; j <= 4; j++ {fmt.Printf("i: %v, j: %v \n",i,j)if i == 2 && j == 2 {break label2   //结束指定标签对应的循环}}}fmt.Println("-----ok")
}

 2.3.2 continue

  • continue结束本次循环,继续下一次循环(continue的作用是结束离它近的那个循环,继续离它近的那个循环,即在同一层循环中)
  • continue 标签,结束指定标签对应的本次循环,可以做到一次跳过指定标签对应的一次循环,并继续下一次循环(注意:如果那个标签没有使用到的话,那么标签不用加,否则报错:定义未使用)

没有使用标签:

package main
import "fmt"
func main(){//双重循环:for i := 1; i <= 5; i++ {for j := 2; j <= 4; j++ {			if i == 2 && j == 2 {continue}fmt.Printf("i: %v, j: %v \n",i,j)}}fmt.Println("-----ok")
}

使用标签:

package main
import "fmt"
func main(){//双重循环:label:for i := 1; i <= 5; i++ {for j := 2; j <= 4; j++ {			if i == 2 && j == 2 {continue label}fmt.Printf("i: %v, j: %v \n",i,j)}}fmt.Println("-----ok")
}

 

 2.3.3 goto

  • Golang的 goto 语句可以无条件地转移到程序中指定的行。
  • goto语句通常与条件语句配合使用。可用来实现条件转移.
  • 在Go程序设计中一般不建议使用goto语句,以免造成程序流程的混乱。
package main
import "fmt"
func main(){fmt.Println("hello golang1")fmt.Println("hello golang2")if 1 == 1 {goto label1 //goto一般配合条件结构一起使用}fmt.Println("hello golang3")fmt.Println("hello golang4")fmt.Println("hello golang5")fmt.Println("hello golang6")label1:fmt.Println("hello golang7")fmt.Println("hello golang8")fmt.Println("hello golang9")
}

2.3.4 return

直接结束当前函数:

package main
import "fmt"
func main(){for i := 1; i <= 100; i++ {fmt.Println(i)if i == 5 {return //结束当前的函数}}fmt.Println("hello golang")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/897.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

centos7之LVS-DR模式传统部署

介绍 优缺点以及适用场景 优点&#xff1a;能负载更多的Realserver减轻LB的压力,性能高于tun模式。 缺点&#xff1a;不支持端口转发(VIP:80必须代理RIP:80),Realserver和LVS需要在同一网段下。 适用&#xff1a;适用于大多数公司&#xff0c;也是大多数公司用的最多的模式。…

序列帧动画

游戏画面中之所以能产生动态效果主要的原因是因为 游戏循环 机制&#xff0c;即游戏画面每隔一个固定时间&#xff08;每一帧&#xff09;就会重新渲染。游戏运行时&#xff0c;每一帧都会更新屏幕&#xff0c;这种更新频率通常称为 帧率&#xff08;Frames Per Second&#xf…

LeetCode:83. 删除排序链表中的重复元素 II(java) 保留一个重复的

目录 题目描述: 代码: 第一种: 第二种: 题目描述: 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a…

Java项目实战II基于spring boot的个人博客系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在信息爆炸的时代&#xff0c;个人博客…

强网杯 2024 pwn false AK

强网杯 2024 pwn &#x1f3c4;&#x1f3fd;‍♀️前言&#x1f3c4;&#x1f3fd;‍♂️heap&#xff08;UAF house of banana orw&#xff09;&#x1f3c4;&#x1f3fd;分析&#x1f3c4;&#x1f3fd;解题&#x1f3c4;&#x1f3fd;exp &#x1f3c4;&#x1f3fd;‍♂…

shodan进阶-实战案例

导语 一、CVE-2019-0708&#xff08;3389漏洞&#xff09; 1. 概要 2. 原理 3. 搜索命令 二、vnc空密码&#xff08;未授权访问&#xff09; 1. 概要 2. 原理 3. 搜索命令 三、思科网络设备未授权 1. 概要 2. 原理 3.搜索命令 四、MongoDB 未授权访问 1. 概要 2…

并发编程中的CAS思想

共享变量操作的原子性 分析如下代码片段&#xff1a; // 获取共享变量时&#xff0c;为了保证该变量的可见性&#xff0c;需要使用 volatile 修饰。 static volatile int count 0;public static void add(){count; }public static void main(String[] args) throws Interrup…

占地1.1万平,2亿投资的智能仓储系统:高架库、AGV、码垛机器人……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 我国调味料市场近年来展现出惊人的增长潜力&#xff0c;各大品牌纷纷加大投入&#xff0c;力求在竞争中脱颖而出。 广东美味鲜调味食品有限公司&#xff0c;作为行业内的佼佼者&#…

激活函数、条件熵和最大熵在机器学习的应用

文章目录 摘要Abstractsigmoid 和 softmaxsigmoid和softmax的关系 条件熵最大熵总结 摘要 本周学习内容探讨了神经网络中激活函数的选择及其对梯度消失问题的影响。通过使用 ReLU 函数替代 Sigmoid 函数来改善梯度消失问题的优化方法&#xff0c;同时分析了 Sigmoid、Softmax …

【MySql】-0.1、Unbunt20.04二进制方式安装Mysql5.7和8.0

1、下载Mysql二进制报&#xff08;选择Linux的通用版本&#xff09; mysql官网地址&#xff1a;https://downloads.mysql.com/archives/community/ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26-linux-glibc2.12-x86_64.tar wget https://downloads.…

全渠道供应链打造中企业定制开发2+1链动模式S2B2C商城小程序的策略与影响

摘要&#xff1a;本文探讨了全渠道供应链打造对于零售企业的重要性及面临的挑战&#xff0c;着重分析了物流环节整合的难点&#xff0c;并以家电行业为例说明了节假日期间物流对企业经营的影响。同时&#xff0c;引入“企业定制开发21链动模式S2B2C商城小程序”这一关键因素&am…

【Python+Pycharm】2024-Python安装配置教程

【PythonPycharm】2024-Python安装配置教程 一、下载装 Python 1、进入Python官网首页&#xff0c;下载最新的Python版本 Download Python | Python.org 选择对应版本下载 安装 测试安装情况 python如果安装失败 在系统环境变量添加安装路径 where pythonwin7安装路径添加…

C++开发者必看:用Flow-IPC改善进程间通信

进程间通信&#xff08;IPC&#xff09;对于现代计算环境至关重要&#xff0c;这种机制使得多个处理器核心能够同时执行多个线程。IPC的本意是让不同线程甚至独立程序能够高效地共享数据。例如&#xff0c;当我们在线观看流媒体视频时&#xff0c;可能会有一个线程负责视频解码…

JAVA 插入 JSON 对象到 PostgreSQL

博主主页:【南鸢1.0】 本文专栏&#xff1a;JAVA 目录 ​编辑 简介 所用&#xff1a; 1、 确保 PostgreSQL 数据库支持 JSON&#xff1a; 2、添加 PostgreSQL JDBC 驱动 3、安装和运行 PostgreSQL 4、建立数据库的连接 简介 在现代软件开发中&#xff0c;由于 JSON 数据…

闪存学习_1:Flash-Aware Computing from Jihong Kim

闪存学习_1&#xff1a;Flash-Aware Computing from Jihong Kim 前言一、Storage Media&#xff1a;NAND Flash Memory1、概念2、编程和擦除操作3、读操作4、异地更新操作&#xff08;Out-Place Update&#xff09;5、数据可靠性6、闪存控制器&#xff08;SSD主控&#xff09;7…

C++STL-deque、stack、queue、priority_queue

C教学总目录 deque、stack、queue、priority_queue 1、deque2、stack使用介绍3、stack实现4、queue使用介绍5、queue实现6、priority_queue使用介绍7、priority_queue实现8、反向迭代器 1、deque deque是双端队列&#xff0c;我们学习的队列是先进先出的(First in first out)&a…

汽车虚拟仿真软件有哪些?行业软件大盘点!

汽车虚拟仿真是指利用计算机技术&#xff0c;根据汽车的设计、制造、测试、运行等各个环节的需求&#xff0c;建立汽车的数学模型和物理模型&#xff0c;通过软件平台进行可视化、动态化、交互式的模拟和分析&#xff0c;从而实现对汽车性能、功能、品质等方面的预测和评估。汽…

【合肥工业大学】操作系统 习题解析 作业答案(仅作学习与交流/侵删)

第一章习题解析 1&#xff0e;设计现代OS的主要目标是什么&#xff1f; 答&#xff1a;&#xff08;1&#xff09;有效性 &#xff08; 2&#xff09;方便性 &#xff08; 3&#xff09;可扩充性 &#xff08; 4&#xff09;开放性 2&#xff0e; OS 的作用可表现在哪几个方…

【C++动态规划】2435. 矩阵中和能被 K 整除的路径|1951

本文涉及知识点 C动态规划 LeetCode2435. 矩阵中和能被 K 整除的路径 给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发&#xff0c;每一步只能往 下 或者往 右 &#xff0c;你想要到达终点 (m - 1, n - 1) 。 请你返回路径和能被 k 整除的…

matlab读取逐日的1km分辨率中国大陆地区的土壤水数据,并汇总至逐月分辨率

1.前言 ESSD一篇文章介绍了逐日的土壤水数据&#xff1a; ESSD - A 1 km daily soil moisture dataset over China using in situ measurement and machine learning 图片来源&#xff1a;Li et al., 2022, ESSD 中国大陆地区的土壤水的数据下载地址&#xff1a; 国家青藏高…