Go语言流程控制语句
作者:奋斗的大橙子 发布时间:2023-10-11 00:53:54
1.条件语句
几个注意点和C#不一样的。
if a < 5 {
return 0
} else {
return 1
}
① 条件语句不需要使用括号将条件包含起来 a<5 ,C#必须有()
②无论语句体内有几条语句,花括号{}都是必须存在的;C#如果只有一条语句可以省略{}
③左花括号{必须与if或者else处于同一行 C#的{}是换行的
④在有返回值的函数中,不允许将“最终的”return语句包含在if...else...结构中,
否则会编译失败(这句话错误的 1.1版Go语言和之后的新版已经支持if else条件语句直接return返回值。),所以上面的demo是可以编译通过的。
2.选择语句
①条件表达式不限制为常量或者整数
②单个case中,可以出现多个结果选项
③Go语言不需要用break来明确退出一个case;C#需要在每一个case结束之后加上break
④增加了fallthrough方法 主要用于多个相同case合并,Go就相当于默认加了break;
和C#正好相反
switch i {
case 0:
fmt.Printf("0")
case 1:
fmt.Printf("1")
case 2:
fallthrough
case 3:
fmt.Printf("3")
case 4, 5, 6:
fmt.Printf("4, 5, 6")
default:
fmt.Printf("Default")
}
如上例子,case 2中有语句fallthrough,那么当i=2时候,执行完fallthrough会执行case3,由此打印出了“3”
⑤可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else... 的逻辑作用等同。如下代码
switch {
case 0 <= Num && Num <= 3:
fmt.Printf("0-3")
case 4 <= Num && Num <= 6:
fmt.Printf("4-6")
case 7 <= Num && Num <= 9:
fmt.Printf("7-9")
}
3.循环语句
Go语言中的循环语句只支持for关键字,而不支持while和do-while结构。
①for后面的条件表达式不需要用圆括号()包含起来
模拟while语句:直接用for后面不加条件
sum := 0
for {
sum++
if sum > 100 {
break
}
}
②for循环中条件表达式中也支持多重赋值
a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 {
a[i], a[j] = a[j], a[i]
}
如上代码:
a) 初始值 i=0 ,j= len(a) – 1
b)循环的条件是 i < j
c)每执行一次 i+1 ,j-1
循环体: a[i], a[j] = a[j], a[i]
Go语言中的for循环与C语言一样,都允许在循环条件中定义和初始化变量,唯一的区别是,Go语言不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。
③Go语言的for循环同样支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环, 如下代码:
break语句终止的是JLoop标签处的外层循环
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
fmt.Println(i)
}
}
JLoop: //Do Something
如果是C#,只能跳出第一层循环,而不能直接跳出第二层循环,这也是区别的地方之一
4.跳转语句
Go语言支持goto语句
func myfunc() {
i := 0
HERE:
fmt.Println(i)
i++
if i < 10 {
goto HERE
}
}
for…range 是什么,就相当于原来的foreach中迭代 k,v结构。
for index, value := range mySlice {
fmt.Println("index: " + index)
fmt.Println("value: " + value)
}
当迭代切片时,关键字range 会返回两个值。第一个值是当前迭代到的索引位置,第二个
值是该位置对应元素值的一份副本
这张图比较好的说明了range的返回值,重点在于值是副本
来源:https://www.cnblogs.com/dcz2015/p/10096157.html
猜你喜欢
- flash_url : "../swfupload/swfupload_f8.swf" upload_url: &quo
- “选项卡”经常会被混同为“滑动门”,滑动门只是一种背景自适应内容的实现方法,不只可以应用在导航菜单,一样也可以应用在其他地方。例如选项卡中就
- 因为我使用的是mmsql数据库,因为遇到一点坑,所以发布出来。准备工作:https://www.lfd.uci.edu/~gohlke/py
- Ranorex测试报告如何发送到邮箱在网上看了下,其实可以通过在Ranorex上或者VS调用编写发送邮箱代码就可以执行发送了,RX主要涉及到
- 在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以
- 引言通过前面的文章我们已经了解到OpenCV 是一个用于计算机视觉和机器学习的开源 python 库。它主要针对实时计算机视觉和图像处理。它
- 一、相同点dump 和 dumps 都实现了序列化load 和 loads 都实现反序列化变量从内存中变成可存储或传输的过程称之为序列化序列
- 目录1. 迭代器1.1 迭代器的使用1.2 创建类的迭代器2. 生成器2.1 生成器的使用2.2 生成器表达式总结1. 迭代器1.1 迭代器
- 百度,谷歌之后都说用setHintSize(self,QCore.QSize(width,height)),然并卵,后来用qss修改就可以了
- 目录1.闭包:用函数代替类2.访问定义在闭包的内的变量1.闭包:用函数代替类有时我们会定义只有一个方法(除了__init__()之外)的类,
- 笔者在学习pandas,在学习过程中总结了一下创建dataframe的方法,通过查阅资料总结遗下几种方法,如果你有其他的方法欢迎留言补充。练
- 最近Google官方的开发者博客中宣布新的版本Tensorflow(0.12)将增加对Windows的支持,想试着windows10下学习t
- 这篇文章所说的视觉元素是指:在一个网站中除去内容(文本、图片、视频、音频等)之外的一些元素。比如图标,背景色,以及背景图案。视觉元素的设计是
- 正则表达式是Python程序设计中非常实用的功能,本文就常用的正则表达式做一汇总,供大家参考之用。具体如下:一、字符串替换1.替换所有匹配的
- 最近遇到一个头疼的问题,用socket接收到一个字符串格式如下:{“trade_status”: {“desc”: “\u30106\u30
- 一、 基础使用1.1 logging使用场景日志是什么?这个不用多解释。百分之九十的程序都需要提供日志功能。Python内置的logging
- 为了降低用户注册难度,国际站的主注册表单一直在改进。主注册三月至今发生了两次较大的变化,现在对表单调整的地方分解如下:1. 两步
- 关于scapyScapy 是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。
- 前言:列表框控件显示多行文本,用户可以选中一行或者多行。所有的文本只能使用一种字体,不能混合使用多种字体。1 属性常用的参数列表如下:1.1
- 为什么要写这篇文章其实是因为最近学到了python的property装饰器的相关知识,刚开始学得云里雾里,于是乎,看了许多相关博客,不巧,大