if/else

基本使用

   if/else应该是每个编程语言中都具备的基本分支结构。

   需要注意的是if||else{要放在同一行上,否则会抛出异常。

   另外,当多个else if出现时,不同分支只会执行一个。

if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}

   如下,判断成绩的等级。

package main

import (
"fmt"
) func main() {
var grades int8 = 82
if grades > 90{
fmt.Println("成绩优异")
}else if grades > 80{
fmt.Println("成绩不错")
}else if grades > 60{
fmt.Println("成绩及格")
}else if grades > 40 {
fmt.Println("成绩较差")
}else{
fmt.Println("建议退学")
}
}

作用域

   if分支代码块具有块级作用域。我们可以在执行if时定义一个变量,该变量不能在块级作用域外使用。

   注意:只能使用短变量的声明方式

package main

import (
"fmt"
) func main() { if grades := 82; grades > 90{
fmt.Println("成绩优异")
}else if grades > 80{
fmt.Println("成绩不错")
}else if grades > 60{
fmt.Println("成绩及格")
}else if grades > 40 {
fmt.Println("成绩较差")
}else{
fmt.Println("建议退学")
}
}

switch/case

基本使用

   switch/case可以让上述代码变得更加简洁。

   同其他语言一样,一个switch中只能有一个defaultdefault通常放在最下面。

  

package main

import (
"fmt"
) func main() {
var grades int8 = 82
switch{
case grades > 90 :
fmt.Println("成绩优异")
// 不需要进行break
case grades > 60 :
fmt.Println("成绩及格")
case grades > 40:
fmt.Println("成绩较差")
default:
fmt.Println("建议退学")
}
}

作用域

   同样,switch也拥有块级作用域。我们可以在switch作用域内定义一个变量,该作用域外不能使用该变量。

package main

import (
"fmt"
) func main() {
switch grades := 82; { // 注意结束的分号
case grades > 90:
fmt.Println("成绩优异")
// 不需要进行break
case grades > 60:
fmt.Println("成绩及格")
case grades > 40:
fmt.Println("成绩较差")
default:
fmt.Println("建议退学")
}
}

fallthrough

   fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。

  

package main

import (
"fmt"
) func main() {
switch age := 18; { // 注意结束的分号
case age < 18:
fmt.Println("未成年")
case age >= 18:
fmt.Println("成年了")
fallthrough // 穿透,执行下一个case 无论是否为true
case age > 30:
fmt.Println("生活忙碌")
default:
fmt.Println("枯燥无味")
}
// 成年了
// 生活忙碌
}

for

索引循环

   条件为true循环,条件为false则退出循环。

   下面是使用索引循环对数组进行遍历。

package main

import (
"fmt"
) func main() {
var arr = [...]string{"①","②","③","④","⑥"} // 定义string数组
for index := 0; index < len(arr); index++{
fmt.Println(index) // 打印索引值
fmt.Println(arr[index]) // 打印元素值
}
}

迭代变量

   迭代变量可以在for循环的外部定义,但是必须要使用;进行占位。

package main

import (
"fmt"
) func main() {
var arr = [...]string{"①","②","③","④","⑥"} // 定义string数组
var index int; // int类型默认为0
for ; index < len(arr); index++{
fmt.Println(index) // 打印索引值
fmt.Println(arr[index]) // 打印元素值
}
}

while循环

   由于Go语言中没有while循环,所以while循环可以用for来进行完成。

   具体的步骤就是省略迭代变量,省略结束条件。

package main

import (
"fmt"
) func main() {
var counter int
for {
if counter >= 5 {
break
}
fmt.Printf("第%d次执行\n", counter+1)
counter++
}
}

for/range

   普通的索引循环只能拿出索引,因此十分的不方便。此时可使用for/range,迭代变量有两个。

   第一个为索引值,第二个为元素本身。

package main

import (
"fmt"
) func main() {
var arr = [...]string{"①", "②", "③", "④", "⑥"} // 定义string数组
for index, element := range arr{
fmt.Printf("索引值:%d\n", index)
fmt.Printf("元素值:%v\n", element)
}
}

退出循环

goto

   当有多层循环嵌套时,可给一个代码块指定一个标签,当执行到该标签时,跳转到标签代码块。

package main

import (
"fmt"
) func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 5 {
goto TAG
}
fmt.Println(j)
}
}
TAG:
fmt.Println("执行标签代码块")
return // 结束main函数
}

break

   break用于跳过本层循环。

package main

import (
"fmt"
) func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 5 {
fmt.Println("跳过本层循环")
break
}
}
fmt.Println("执行外层循环")
break
}
fmt.Println("代码执行结束")
}

continue

   continue用于跳过本次循环。

package main

import (
"fmt"
) func main() {
for i := 0; i < 10; i++ {
if i==5{
fmt.Println("跳过本次循环")
}else{
fmt.Println(i)
}
}
fmt.Println("代码执行结束")
}

Go 分支流程的更多相关文章

  1. 数据类型&分支流程控制(2)

    1.数据类型 1.数据类型 局部变量:书写在方法中的变量: 全局变量:书写在类中,与方法平级的变量: -如果没有给变量赋初值 -全局变量会默认拥有一个初始值 -局部变量将没有初始值,这个时候不能使用这 ...

  2. Slickflow.NET 开源工作流引擎快速入门之三: 简单或分支流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从请假流程,或分支模式来快速了解引擎代码的编写. 1. 创建或分支流程图形 或分支流程是常见的 ...

  3. Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...

  4. python的单、双、多分支流程控制

    if流程控制总结: 1.当满足条件时,执行满足条件的代码. 2.当执行完if语句内代码,程序继续往下执行. 单分支: if 条件成立,执行满足条件的代码 如下: if a>50: print(' ...

  5. C语言 第四章 关系、逻辑运算与分支流程控制

    一.关系运算 若干表达式用关系运算符连接而成,就构成关系表达式. 关系表达式中,表达式成立,其值为1(真):表达式不成立,其值为0(假).其他表达式中,其结果如果是非0则为真,结果为0则为假. 关系运 ...

  6. C语言 第三章 关系、逻辑运算与分支流程控制

    目录 一.关系运算 二.逻辑运算 三.运算优先级 四.if语句 4.0.代码块 4.1.单if语句 4.2.if else 4.3.多重if 4.4.?号:号表达式 五.switch语句 一.关系运算 ...

  7. JavaScript-----6.流程控制:分支

    1.流程控制 就是来控制代码按照何种顺序来执行,流程控制有三种结构:顺序结构.分支结构.循环结构 2.顺序流程控制 程序按照代码先后顺序依次执行 3.分支流程控制 JS中提供两种分支结构语句:if语句 ...

  8. JavaScript 流程控制-分支

    JavaScript 流程控制-分支 1.流程控制 在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的,很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能. 简单理解:流程控 ...

  9. Sql Server系列:流程控制语句

    T-SQL中用来编写流程控制模块的语句有:BEGIN...AND语句.IF...ELSE语句.CASE语句.WHILE语句.GOTO语句.BREAK语句.WAITFOR语句和RETURN语句. 1 B ...

随机推荐

  1. Java通过反射加载的类,变量无法注入

    //之前都是直接newInstance的到obj,类中的变量无法被注入//Object obj = aClass.newInstance(); //改成如下方式的到bean,变量就能顺利被注入 ,其他 ...

  2. Javascript常见数据类型API

    1 - 内置对象 1.1 内置对象 ​ JavaScript 中的对象分为3种:自定义对象 .内置对象. 浏览器对象 ​ 前面两种对象是JS 基础 内容,属于 ECMAScript: 第三个浏览器对象 ...

  3. 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码

    本篇为Pod Terminating原因追踪系列的第三篇,前两篇分别介绍了两种可能导致Pod Terminating的原因.在处理现网问题时,Pod Terminating属于比较常见的问题,而本系列 ...

  4. 学习一下 JVM (三) -- 了解一下 垃圾回收

    一.简单了解几个概念 1.什么是垃圾(Garbage)?什么是垃圾回收(Garbage Collection,简称 GC)? (1)什么是垃圾(Garbage)? 这里的垃圾 指的是 在程序运行过程中 ...

  5. Timeline Event

    https://forum.unity.com/threads/timeline-events.479400/

  6. Android studio Debug 源码

    原来有的地方打不了断点 会提示no executable code at line xxx 源码sdk里有,sdkManager下好对应版本,然后使用对应版本的模拟器debug就行了 如果要debug ...

  7. Arbitrary-Oriented Object Detection with Circular Smooth Label(ECCV2020,旋转目标检测)

    论文链接:https://arxiv.org/abs/2003.05597 code:https://github.com/Thinklab-SJTU/CSL_RetinaNet_Tensorflow ...

  8. Postman发送POST请求到Spring Boot的正确姿势

    最近用Spring Boot搭建了一些restful api,写起来真的很爽.但是当用Postman测试一些POST请求的接口的时候却遇到一些问题,上网冲浪查了一堆博客资料,发现都讲得不清不楚,于是记 ...

  9. .net mvc web api上传图片/文件并重命名

    #region 上传图片 /// <summary> /// 上传图片到服务器 当error为0时成功,为1时失败 并从errmsg获取消息 /// </summary> // ...

  10. 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering

    1. 为什么在纹理采样时需要texture filter(纹理过滤). 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应textur ...