Golang中的流程控制有哪些及怎么实现


这篇文章主要讲解了“Golang中的流程控制有哪些及怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的流程控制有哪些及怎么实现”吧!Go语言基础之流程控制主要包括以下内容:条件语句if条件语句switch条件语句select循环语句for循环语句range循环控制Goto、Break、ContinueGo语言中if条件判断的格式如下:

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

前端的同学想必对js相对熟悉,相对于js来说,go表达式去掉了括号(),但同时给了一些约束,与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个ifelse if右边的大括号在同一行。

x:=0

//ifx>10//Error:missingconditioninifstatement
//{
//}

ifn:="abc";x>0{//初始化语句未必就是定义变量,如println("init")也是可以的。
println(n[2])
}elseifxb?a:b"。

packagemain

import"fmt"

funcmain(){
/*定义局部变量*/
varaint=10
/*使用if语句判断布尔表达式*/
ifa

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。

packagemain

import"fmt"

funcmain(){
/*定义局部变量*/
vargradestring="B"
varmarksint=90

switchmarks{
case90:grade="A"
case80:grade="B"
case50,60,70:grade="C"
default:grade="D"
}

switch{
casegrade=="A":
fmt.Printf("优秀!n")
casegrade=="B",grade=="C":
fmt.Printf("良好n")
casegrade=="D":
fmt.Printf("及格n")
casegrade=="F":
fmt.Printf("不及格n")
default:
fmt.Printf("差n")
}
fmt.Printf("你的等级是%sn",grade)
}



以上代码执行结果为:
优秀!
你的等级是A

select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。select 是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。 select 随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。以下描述了 select 语句的语法:

每个case都必须是一个通信
所有channel表达式都会被求值
所有被发送的表达式都会被求值
如果任意某个通信可以进行,它就执行;其他被忽略。
如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。
否则:
如果有default子句,则执行该语句。
如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。

packagemain

import"fmt"

funcmain(){
varc1,c2,c3chanint
vari1,i2int
select{
casei1=

select可以监听channel的数据流动

select可以监听channel的数据流动
select的用法与switch语法非常类似,由select开始的一个新的选择块,每个选择条件由case语句来描述与switch语句可以选择任何使用相等比较的条件相比,select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作

select{//不停的在这里检测
case

在一个select语句中,Go会按顺序从头到尾评估每一个发送和接收的语句。

在一个select语句中,Go会按顺序从头到尾评估每一个发送和接收的语句。
如果其中的任意一个语句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来使用。 如果没有任意一条语句可以执行(即所有的通道都被阻塞),那么有两种可能的情况: ①如果给出了default语句,那么就会执行default的流程,同时程序的执行会从select语句后的语句中恢复。 ②如果没有default语句,那么select语句将被阻塞,直到至少有一个case可以进行下去。

//比如在下面的场景中,使用全局resChan来接受response,如果时间超过3S,resChan中还没有数据返回,则第二条case将执行
varresChan=make(chanint)
//dorequest
functest(){
select{
casedata:=

和if一样,相对于js,go语言的for循环也去掉了括号(),其他并没有太大的区别。

packagemain

import"fmt"

funcmain(){

varbint=15
varaint

numbers:=[6]int{1,2,3,5}

/*for循环*/
fora:=0;a

Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

forkey,value:=rangeoldMap{
newMap[key]=value
}

登录后复制

packagemain

funcmain(){
s:="abc"
//忽略2ndvalue,支持string/array/slice/map。
fori:=ranges{
println(s[i])
}
//忽略index。
for_,c:=ranges{
println(c)
}
//忽略全部返回值,仅迭代。
forranges{

}

m:=map[string]int{"a":1,"b":2}
//返回(key,value)。
fork,v:=rangem{
println(k,v)
}
}

输出结果:

97
98
99
97
98
99
a1
b2

for 和 for range有什么区别?

登录后复制for 和 for range有什么区别?
主要是使用场景不同for可以遍历array和slice,遍历key为整型递增的map,遍历stringfor range可以完成所有for可以做的事情,却能做到for不能做的,包括遍历key为string类型的map并同时获取key和value,遍历channel循环控制语句循环控制语句可以控制循环体内语句的执行过程。GO 语言支持以下几种循环控制语句:

1.三个语句都可以配合标签(label)使用
2.标签名区分大小写,定以后若不使用会造成编译错误
3.continue、break配合标签(label)可用于多层循环跳出
4.goto是调整执行位置,与continue、break配合标签(label)的结果并不相同

break(跳出循环)
continue(继续下次循环)
break语句可以结束forswitchselect的代码块。break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的forswitchselect的代码块上。

break(跳出循环)
continue(继续下次循环)
break语句可以结束forswitchselect的代码块。break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的forswitchselect的代码块上。
continue(继续下次循环)continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。在 continue语句后添加标签时,表示开始标签对应的循环goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。 例如双层嵌套的for循环要退出时:

funcgotoDemo1(){
	varbreakFlagbool
	fori:=0;i

使用goto语句能简化代码:

funcgotoDemo2免费云主机域名(){
	fori:=0;i

使用goto语句能简化代码:
感谢各位的阅读,以上就是“Golang中的流程控制有哪些及怎么实现”的内容了,经过本文的学习后,相信大家对Golang中的流程控制有哪些及怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: Angular的Directive指令怎么使用

这篇文章主要介绍“Angular的Directive指令怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Angular的Directive指令怎么使用”文章能帮助大家解决问题。Directive 用来修饰 DOM…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/23 22:34
Next 02/23 22:35

相关推荐