Go语言的流程结构简单介绍
文章目录
- 流程结构
- 流程结构
- if
- if的基本表达
- 特殊用法
- switch
- swith基本用法
- fallthrough
- Type Switch
- for
- 基础语法
- for语法2
- for的range格式
流程结构
流程结构
和c及java一样,go程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。
顺序结构:从上向下,逐行执行。
选择结构:条件满足,某些代码才会执行。0-1次
分支语句:if,switch,select
循环结构:条件满足,某些代码会被反复的执行多次。0-N次
循环语句:for
if
if的基本表达
GO中的if与c和Java中的基本一致,只是表达方法不一样,Go的if不需要使用括号
如代码所示
if 布尔表达式1 {/* 在布尔表达式1为 true 时执行 */
} else if 布尔表达式2{/* 在布尔表达式1为 false ,布尔表达式2为true时执行 */
} else{/* 在上面两个布尔表达式都为false时,执行*/
}
特殊用法
Go语言中的if语句还有一个特殊用法
if statement; condition {
}
代码中的statemen表示创建一个作用域在if中的数据,分号后表示条件
示例代码
if num := 10; num % 2 == 0 { //checks if number is evenfmt.Println(num,"is even") } else {fmt.Println(num,"is odd")}
switch
swith基本用法
和c以及java一样,可以用if来表示的语句基本都可以使用switch来表示
switch var1 {case val1:...case val2:...default:...
}
但是Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。感觉在这一点上比c和Java要更方便
case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。
如代码所示
package mainimport "fmt"func main() {/* 定义局部变量 */var grade string = "B"var marks int = 90switch marks {case 90: grade = "A"case 80: grade = "B"case 50,60,70 : grade = "C" //case 后可以由多个数值default: grade = "D" }
//switch后没有变量的话默认switch后跟bool型trueswitch {case grade == "A" :fmt.Printf("优秀!\n" ) case grade == "B", grade == "C" :fmt.Printf("良好\n" ) case grade == "D" :fmt.Printf("及格\n" ) case grade == "F":fmt.Printf("不及格\n" )default:fmt.Printf("差\n" );}fmt.Printf("你的等级是 %s\n", grade );
}
fallthrough
如需贯通后续的case,就添加fallthrough
case
package mainimport ("fmt"
)type data [2]intfunc main() {switch x := 5; x {default:fmt.Println(x)case 5:x += 10fmt.Println(x)fallthroughcase 6:x += 20fmt.Println(x)}}
运行结果
15
35
注意:switch的注意事项
- case后的常量值不能重复
- case后可以有多个常量值
- fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。
Type Switch
switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
例如
switch i := x.(type) {case nil: fmt.Printf(" x 的类型 :%T",i) case int: fmt.Printf("x 是 int 型") case float64:fmt.Printf("x 是 float64 型") case func(int) float64:fmt.Printf("x 是 func(int) 型") case bool, string:fmt.Printf("x 是 bool 或 string 型" ) default:fmt.Printf("未知型") }
for
基础语法
for init; condition; post { }
例如
func main() { for i := 1; i <= 10; i++ {fmt.Printf(" %d",i)}
和if一样在for循环中声明的变量仅在循环范围内可用。因此,上述代码中的i不能在外部访问循环。
for语法2
在for循环中,如果变量已经声明,在for中可以只存在判断语句
例如
var b int = 15
var a int
for a < b {a++fmt.Printf("a 的值为: %d\n", a)}
for的range格式
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环
如:
for key, value := range oldMap {newMap[key] = value
}
Go语言的流程结构简单介绍相关推荐
- Ubuntu目录结构简单介绍笔记
一.Ubuntu目录结构简单介绍 Ubuntu目录结构简单介绍 /根目录 1.boot/启动文件.所有与启动有关的文件都保存在这里 ·grub/ Grub引导器相关的文件 2.dev/设备文件 ...
- 磁盘结构简单介绍,硬盘工作原理,接口种类IDE,SATA,SCSI,FC接口,主引导技术MBR,文件系统类型
磁盘的结构 物理结构: 盘片:硬盘有多个盘片,每个盘片2面 磁头:磁盘里最贵的一个,非接触式,读写合一分离式 数据结构: 扇区:盘片被平均分割成多个扇形区域,每个存放512字节 磁道:同一个盘片不同半 ...
- 前端页面结构简单介绍
1.head和body 为了使用python进行爬虫,所以需要先前端页面结构进行初步认识,可以在pycharm里新建一个.html文件,自动就会生成一个框架 <!DOCTYPE html> ...
- matlab之程序流程控制简单介绍
MATLAB中的程序流程控制语句有: 1.分支控制语句(if结构和switch结构) 2.循环控制语句(for循环.while循环.continue语句和break语句) 3.程序终止语句(retur ...
- Elasticsearch目录结构简单介绍
我Linux机器上的Elasticsearch是通过下载的zip包(tar.gz包)安装的,目录结构如下: # 查看elasticsearch目录下的文件和目录 [es@zzf elasticsear ...
- 线性结构和非线性结构简单介绍
简 数据结构包含:线性结构和非线性结构. 线性结构: 线性结构是十分常用的数据结构,其特点是数据元素之间存在一对一的线性关系.如:arry[6] = 6 线性结构有两种不同的存储结构,分为:顺序存储结 ...
- Smali语法简单介绍
Smali语言其实就是Davlik的寄存器语言: Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件,文件的展示 ...
- 自动化工具之Appium工具简单介绍
背景 自动化,性能测试,接口测试,开发平台等工作,到底测试的价值在哪里,其实价值来源不断充实与为大众服务,今天简单介绍ui小工具appium攻击. 简单介绍 Appium 是一个自动化测试开源工具,支 ...
- jpeg压缩简单介绍及huffman table
一.jpeg压缩流程的简单介绍 jpeg压缩是基于YUV颜色空间进行压缩编码的,首先将RGB转化成YUV,然后将像素值减去128,转化到范围-128~127.后要进行采样,一般来说有3中采样方式:4: ...
最新文章
- 数据中心实现高效运维的秘诀
- ORA-04028: cannot generate diana for object xxx
- WebRTC Linux ADM 实现中的符号延迟加载机制
- cassandra学习笔记四
- 基于OpenCV实现二值图细化,骨骼化并求出端点和交叉点
- html请求接口_Python 如何使用 HttpRunner 做接口自动化测试
- I. 知识图谱 应用案例 --- 百度
- java高校贫困生助学贷款系统ssm框架毕业设计
- Debian修改IP地址
- 大专学历计算机专业可以积分,持有大专紧缺急需专业可直接申请上海居住证积分?...
- MTK 平台TP调试遇坑
- 单卡就能运行AI画画模型,小白也能看懂的教程来了,还有100万卡时免费NPU算力可用丨昇思MindSpore...
- 网易云课堂python怎样_有木有人上过网易云课堂的 Python Web 微专业,怎么样?
- CrossWalk问题
- 堆和栈的区别(内存和数据结构)
- MOSFet 的类型和区别:NP沟道,增强耗尽
- 浏览器总是提示验证码输入错误
- diskgenius分区教程(diskgenius分区教程)
- 论文文献引用规范和标准(国标GBT7714)@endnote国标样式@citation交叉引用编号
- Windchill二次开发-自定义文件编号(2)
热门文章
- 简单的RTSP播放器
- 毕业设计大全——毕业设计参考选题(Jsp+Servlet+SSM+SpringBoot)(持续更新)
- 计算机考试成绩80分是统计指标值,某同学计算机考试成绩80分,这是统计指标值。...
- php 取字符串任意两个的中间部分,掐头去尾
- android property实现路径
- PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++
- 5个wordpress资源网站推荐
- unity 音频可视化
- Linux学习日记- - -配置篇##1
- 和量子计算有什么区别 并发_到底什么是量子计算?