文章目录

  • 流程结构
    • 流程结构
    • 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的注意事项

  1. case后的常量值不能重复
  2. case后可以有多个常量值
  3. 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语言的流程结构简单介绍相关推荐

  1. Ubuntu目录结构简单介绍笔记

    一.Ubuntu目录结构简单介绍 Ubuntu目录结构简单介绍  /根目录   1.boot/启动文件.所有与启动有关的文件都保存在这里 ·grub/ Grub引导器相关的文件 2.dev/设备文件 ...

  2. 磁盘结构简单介绍,硬盘工作原理,接口种类IDE,SATA,SCSI,FC接口,主引导技术MBR,文件系统类型

    磁盘的结构 物理结构: 盘片:硬盘有多个盘片,每个盘片2面 磁头:磁盘里最贵的一个,非接触式,读写合一分离式 数据结构: 扇区:盘片被平均分割成多个扇形区域,每个存放512字节 磁道:同一个盘片不同半 ...

  3. 前端页面结构简单介绍

    1.head和body 为了使用python进行爬虫,所以需要先前端页面结构进行初步认识,可以在pycharm里新建一个.html文件,自动就会生成一个框架 <!DOCTYPE html> ...

  4. matlab之程序流程控制简单介绍

    MATLAB中的程序流程控制语句有: 1.分支控制语句(if结构和switch结构) 2.循环控制语句(for循环.while循环.continue语句和break语句) 3.程序终止语句(retur ...

  5. Elasticsearch目录结构简单介绍

    我Linux机器上的Elasticsearch是通过下载的zip包(tar.gz包)安装的,目录结构如下: # 查看elasticsearch目录下的文件和目录 [es@zzf elasticsear ...

  6. 线性结构和非线性结构简单介绍

    简 数据结构包含:线性结构和非线性结构. 线性结构: 线性结构是十分常用的数据结构,其特点是数据元素之间存在一对一的线性关系.如:arry[6] = 6 线性结构有两种不同的存储结构,分为:顺序存储结 ...

  7. Smali语法简单介绍

    Smali语言其实就是Davlik的寄存器语言: Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件,文件的展示 ...

  8. 自动化工具之Appium工具简单介绍

    背景 自动化,性能测试,接口测试,开发平台等工作,到底测试的价值在哪里,其实价值来源不断充实与为大众服务,今天简单介绍ui小工具appium攻击. 简单介绍 Appium 是一个自动化测试开源工具,支 ...

  9. jpeg压缩简单介绍及huffman table

    一.jpeg压缩流程的简单介绍 jpeg压缩是基于YUV颜色空间进行压缩编码的,首先将RGB转化成YUV,然后将像素值减去128,转化到范围-128~127.后要进行采样,一般来说有3中采样方式:4: ...

最新文章

  1. 数据中心实现高效运维的秘诀
  2. ORA-04028: cannot generate diana for object xxx
  3. WebRTC Linux ADM 实现中的符号延迟加载机制
  4. cassandra学习笔记四
  5. 基于OpenCV实现二值图细化,骨骼化并求出端点和交叉点
  6. html请求接口_Python 如何使用 HttpRunner 做接口自动化测试
  7. I. 知识图谱 应用案例 --- 百度
  8. java高校贫困生助学贷款系统ssm框架毕业设计
  9. Debian修改IP地址
  10. 大专学历计算机专业可以积分,持有大专紧缺急需专业可直接申请上海居住证积分?...
  11. MTK 平台TP调试遇坑
  12. 单卡就能运行AI画画模型,小白也能看懂的教程来了,还有100万卡时免费NPU算力可用丨昇思MindSpore...
  13. 网易云课堂python怎样_有木有人上过网易云课堂的 Python Web 微专业,怎么样?
  14. CrossWalk问题
  15. 堆和栈的区别(内存和数据结构)
  16. MOSFet 的类型和区别:NP沟道,增强耗尽
  17. 浏览器总是提示验证码输入错误
  18. diskgenius分区教程(diskgenius分区教程)
  19. 论文文献引用规范和标准(国标GBT7714)@endnote国标样式@citation交叉引用编号
  20. Windchill二次开发-自定义文件编号(2)

热门文章

  1. 简单的RTSP播放器
  2. 毕业设计大全——毕业设计参考选题(Jsp+Servlet+SSM+SpringBoot)(持续更新)
  3. 计算机考试成绩80分是统计指标值,某同学计算机考试成绩80分,这是统计指标值。...
  4. php 取字符串任意两个的中间部分,掐头去尾
  5. android property实现路径
  6. PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++
  7. 5个wordpress资源网站推荐
  8. unity 音频可视化
  9. Linux学习日记- - -配置篇##1
  10. 和量子计算有什么区别 并发_到底什么是量子计算?