Go 分支流程
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
中只能有一个default
,default
通常放在最下面。
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 分支流程的更多相关文章
- 数据类型&分支流程控制(2)
1.数据类型 1.数据类型 局部变量:书写在方法中的变量: 全局变量:书写在类中,与方法平级的变量: -如果没有给变量赋初值 -全局变量会默认拥有一个初始值 -局部变量将没有初始值,这个时候不能使用这 ...
- Slickflow.NET 开源工作流引擎快速入门之三: 简单或分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从请假流程,或分支模式来快速了解引擎代码的编写. 1. 创建或分支流程图形 或分支流程是常见的 ...
- Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例
前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...
- python的单、双、多分支流程控制
if流程控制总结: 1.当满足条件时,执行满足条件的代码. 2.当执行完if语句内代码,程序继续往下执行. 单分支: if 条件成立,执行满足条件的代码 如下: if a>50: print(' ...
- C语言 第四章 关系、逻辑运算与分支流程控制
一.关系运算 若干表达式用关系运算符连接而成,就构成关系表达式. 关系表达式中,表达式成立,其值为1(真):表达式不成立,其值为0(假).其他表达式中,其结果如果是非0则为真,结果为0则为假. 关系运 ...
- C语言 第三章 关系、逻辑运算与分支流程控制
目录 一.关系运算 二.逻辑运算 三.运算优先级 四.if语句 4.0.代码块 4.1.单if语句 4.2.if else 4.3.多重if 4.4.?号:号表达式 五.switch语句 一.关系运算 ...
- JavaScript-----6.流程控制:分支
1.流程控制 就是来控制代码按照何种顺序来执行,流程控制有三种结构:顺序结构.分支结构.循环结构 2.顺序流程控制 程序按照代码先后顺序依次执行 3.分支流程控制 JS中提供两种分支结构语句:if语句 ...
- JavaScript 流程控制-分支
JavaScript 流程控制-分支 1.流程控制 在一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的,很多时候我们要通过控制代码的执行顺序来实现我们要完成的功能. 简单理解:流程控 ...
- Sql Server系列:流程控制语句
T-SQL中用来编写流程控制模块的语句有:BEGIN...AND语句.IF...ELSE语句.CASE语句.WHILE语句.GOTO语句.BREAK语句.WAITFOR语句和RETURN语句. 1 B ...
随机推荐
- Hive 常见面试题(二)
1.Hive行转列和列转行如何实现? 行转列 使用 concat_ws 实现行转列. 例如: select user_id, concat_ws(',',collect_list(order_id)) ...
- 面试官:谈一下你对DDD的理解?我:马什么梅?
领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型.领域对象模型和分析对象模型. ——<UML和模式应用> 我们在日常开发中,经常针 ...
- 快速幂 (C++)
typedef long long LL; using namespace std; //求a^b%m,递归写法 LL binaryPow(LL a,LL b,LL m){ if(b==){ //如果 ...
- java服务端实现微信小程序内容安全
请参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.i ...
- oracle无法通过ip地址连接
问题描述:使用plsql可以连接本地oracle实例,但telnet 192.168.130.71 (内网ip)不通. 其实在11g安装完成后,默认网络配置 listener.ora中 host = ...
- 小程序开发-Map地图组件
Map组件 是原生组件,使用时请注意相关限制.个性化地图能力可在小程序后台"设置-开发者工具-腾讯位置服务"申请开通. 设置subkey后,小程序内的地图组件均会使用该底图效果,底 ...
- 小程序开发-block组件的使用
微信小程序中,block不是一个组件,而是一个包装元素,不会在页面中做任何渲染. 使用情况:条件渲染 wx:if 因为 wx:if 是一个控制属性,需要将它添加到一个标签/组件上,用于控制隐藏与显示. ...
- shell小技巧(1)计算一个文件中空行数量
方法1: grep -E "^$" 1.txt | wc -l 详解:在网上摘抄,个人觉得不使用-E参数也行,利用正则^$可帅选出空行 方法2: file="1.txt& ...
- Webpack 打包优化之体积篇
谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...
- 解Bug之路-串包Bug
解Bug之路-串包Bug 笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug.现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后的工作中能够少 ...