iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang中的流程控制有哪些及怎么实现
  • 332
分享到

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

2023-07-04 16:07:28 332人浏览 薄情痞子
摘要

这篇文章主要讲解了“golang中的流程控制有哪些及怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的流程控制有哪些及怎么实现”吧!Go语言基础之流程控制主要包括以下内容

这篇文章主要讲解了“golang中的流程控制有哪些及怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的流程控制有哪些及怎么实现”吧!

Go语言基础之流程控制主要包括以下内容:

  • 条件语句if

  • 条件语句switch

  • 条件语句select

  • 循环语句for

  • 循环语句range

  • 循环控制Goto、Break、Continue

1. 条件语句if

Go语言中if条件判断的格式如下:

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

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

x := 0// if x > 10        // Error: missing condition in if statement// {// }if n := "abc"; x > 0 {     // 初始化语句未必就是定义变量, 如 println("init") 也是可以的。    println(n[2])} else if x < 0 {    // 注意 else if 和 else 左大括号位置。    println(n[1])} else {    println(n[0])} *不支持三元操作符(三目运算符) "a > b ? a : b"。 package mainimport "fmt"func main() {      var a int = 10      if a < 20 {              fmt.Printf("a 小于 20\n" )   }   fmt.Printf("a 的值为 : %d\n", a)}以上代码执行结果为:a 小于 20a 的值为 : 10

2. 条件语句switch

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

package mainimport "fmt"func main() {      var grade string = "B"   var marks int = 90   switch marks {      case 90: grade = "A"      case 80: grade = "B"      case 50,60,70 : grade = "C"      default: grade = "D"     }   switch {      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 )}以上代码执行结果为:优秀!你的等级是 A

3. 条件语句select

select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

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

以下描述了 select 语句的语法:

    每个case都必须是一个通信    所有channel表达式都会被求值    所有被发送的表达式都会被求值    如果任意某个通信可以进行,它就执行;其他被忽略。    如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。    否则:    如果有default子句,则执行该语句。    如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。
package mainimport "fmt"func main() {   var c1, c2, c3 chan int   var i1, i2 int   select {      case i1 = <-c1:         fmt.Printf("received ", i1, " from c1\n")      case c2 <- i2:         fmt.Printf("sent ", i2, " to c2\n")      case i3, ok := (<-c3):  // same as: i3, ok := <-c3         if ok {            fmt.Printf("received ", i3, " from c3\n")         } else {            fmt.Printf("c3 is closed\n")         }      default:         fmt.Printf("no communication\n")   }    }以上代码执行结果为: no communication

select可以监听channel的数据流动

select的用法与switch语法非常类似,由select开始的一个新的选择块,每个选择条件由case语句来描述

与switch语句可以选择任何使用相等比较的条件相比,select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作

 select { //不停的在这里检测    case <-chanl : //检测有没有数据可以读    //如果chanl成功读取到数据,则进行该case处理语句    case chan2 <- 1 : //检测有没有可以写    //如果成功向chan2写入数据,则进行该case处理语句    //假如没有default,那么在以上两个条件都不成立的情况下,就会在此阻塞//一般default会不写在里面,select中的default子句总是可运行的,因为会很消耗CPU资源    default:    //如果以上都没有符合条件,那么则进行default处理流程    }

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

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

典型用法-超时判断

//比如在下面的场景中,使用全局resChan来接受response,如果时间超过3S,resChan中还没有数据返回,则第二条case将执行var resChan = make(chan int)// do requestfunc test() {   select {   case data := <-resChan:       doData(data)   case <-time.After(time.Second * 3):       fmt.Println("request time out")   }}func doData(data int) {   //...}

4. 循环语句for

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

package mainimport "fmt"func main() {   var b int = 15   var a int   numbers := [6]int{1, 2, 3, 5}      for a := 0; a < 10; a++ {      fmt.Printf("a 的值为: %d\n", a)   }   for a < b {      a++      fmt.Printf("a 的值为: %d\n", a)      }   for i,x:= range numbers {      fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)   }   }以上实例运行输出结果为:    a 的值为: 0    a 的值为: 1    a 的值为: 2    a 的值为: 3    a 的值为: 4    a 的值为: 5    a 的值为: 6    a 的值为: 7    a 的值为: 8    a 的值为: 9    a 的值为: 1    a 的值为: 2    a 的值为: 3    a 的值为: 4    a 的值为: 5    a 的值为: 6    a 的值为: 7    a 的值为: 8    a 的值为: 9    a 的值为: 10    a 的值为: 11    a 的值为: 12    a 的值为: 13    a 的值为: 14    a 的值为: 15    第 0 位 x 的值 = 1    第 1 位 x 的值 = 2    第 2 位 x 的值 = 3    第 3 位 x 的值 = 5    第 4 位 x 的值 = 0    第 5 位 x 的值 = 0

5. 循环语句range

Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。

for 循环的 range 格式可以对 slice、map、数组字符串等进行迭代循环。格式如下:

for key, value := range oldMap {    newMap[key] = value}

登录后复制

package mainfunc main() {    s := "abc"    // 忽略 2nd value,支持 string/array/slice/map。    for i := range s {        println(s[i])    }    // 忽略 index。    for _, c := range s {        println(c)    }    // 忽略全部返回值,仅迭代。    for range s {    }    m := map[string]int{"a": 1, "b": 2}    // 返回 (key, value)。    for k, v := range m {        println(k, v)    }}输出结果:    97    98    99    97    98    99    a 1    b 2

for 和 for range有什么区别?

主要是使用场景不同

for可以遍历array和slice,遍历key为整型递增的map,遍历string

for range可以完成所有for可以做的事情,却能做到for不能做的,包括遍历key为string类型的map并同时获取key和value,遍历channel

6. 循环控制Goto、Break、Continue

循环控制语句

循环控制语句可以控制循环体内语句的执行过程。

GO 语言支持以下几种循环控制语句:

Goto、Break、Continue

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

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

continue(继续下次循环)continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。在 continue语句后添加标签时,表示开始标签对应的循环

goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。 例如双层嵌套的for循环要退出时:

func gotoDemo1() {var breakFlag boolfor i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if j == 2 {// 设置退出标签breakFlag = truebreak}fmt.Printf("%v-%v\n", i, j)}// 外层for循环判断if breakFlag {break}}}

使用goto语句能简化代码:

func gotoDemo2() {for i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if j == 2 {// 设置退出标签goto breakTag}fmt.Printf("%v-%v\n", i, j)}}return// 标签breakTag:fmt.Println("结束for循环")}

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

您可能感兴趣的文档:

--结束END--

本文标题: Golang中的流程控制有哪些及怎么实现

本文链接: https://www.lsjlt.com/news/346382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang中的流程控制有哪些及怎么实现
    这篇文章主要讲解了“Golang中的流程控制有哪些及怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的流程控制有哪些及怎么实现”吧!Go语言基础之流程控制主要包括以下内容...
    99+
    2023-07-04
  • golang流程控制语句有哪些
    流程控制语句:1、if语句,由一个布尔表达式后紧跟一个或多个语句组成;2、“if…else”语句,else中的表达式在布尔表达式为false时执行;3、switch语句,用于基于不同条件执行不同动作;4、select语句;5、for循环语句...
    99+
    2023-05-14
    流程控制 go语言 Golang
  • golang流程控制语句有哪些?
    常见的流程控制语句有if语句、for循环、switch语句、select语句、break和continue语句、goto语句。详细介绍:1、if语句: 用于条件性地执行一段代码块;2、for循环: 用于重复执行一段代码块;3、switch语...
    99+
    2023-12-21
    go语言 Golang 流程控制语句
  • JAVA中的流程控制语句有哪些
    这期内容当中小编将会给大家带来有关JAVA中的流程控制语句有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。第一节 JAVA条件语句之if语句单独的if语句,语法:if(条件){条件成立时执行的代码};...
    99+
    2023-05-31
    java 流程控制语句 ava
  • java中有哪些流程控制语句
    java中有哪些流程控制语句?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。程序的结构分类:顺序结构:按照写代码的顺序 一次执行 选择结构:根据条件的不同有选择的执行不同的代码循...
    99+
    2023-05-31
    java 中有 ava
  • mysql中有哪些流程控制语句
    mysql中的流程控制语句有:1.IF语句,根据不同条件执行不同操作;2.CASE语句,多分支语句结构;3.WHILE循环语句,先判断后执行;4.LOOP循环语句,没有内置的循环条件;5.REPEAT循环语句,先执行后判断;mysql中的流...
    99+
    2024-04-02
  • python中有哪些流程控制函数
    这篇文章给大家介绍python中有哪些流程控制函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。    shell脚本是由系统命令、变量、流程控制三者组合而成的;  &...
    99+
    2023-06-04
  • Python流程控制语句有哪些及如何用
    本篇内容介绍了“Python流程控制语句有哪些及如何用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、选择结构1.1、if 语句语法格式i...
    99+
    2023-07-04
  • JavaScript中有哪些结构的程序控制流
    本篇文章为大家展示了JavaScript中有哪些结构的程序控制流,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、if条件语句基本格式:if(表述式)语句段1;.....
    99+
    2024-04-02
  • Python中有哪些流程控制关键字
    Python中有哪些流程控制关键字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python流程控制关键字之1)if/elsex = int(input...
    99+
    2023-06-17
  • python的流程控制语句有哪些
    python的流程控制语句有:1、if语句,根据条件执行不同的代码块;2、for循环,用于遍历一个序列或其他可迭代对象;3、while循环,当给定条件为真时,重复执行一段代码;4、break语句,用于终止当前循环,跳出整个循环;5、cont...
    99+
    2023-12-11
    python
  • Java的流程控制语句有哪些
    本篇内容介绍了“Java的流程控制语句有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!01、if-else 相关1)if 语句if 语句...
    99+
    2023-06-16
  • php有哪些流程控制语句
    php有哪些流程控制语句?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4...
    99+
    2023-06-14
  • python流程控制有哪些结构
    python中的流程控制结构有顺序结构、分支结构和循环结构三种:顺序结构顺序结构就是指按顺序去执行步骤,即语句从上至下按顺序执行。分支结构分支结构是指根据条件来选择性的执行某段代码,python中常使用if语句来实现分支结构。循环结构pyt...
    99+
    2024-04-02
  • Python中有哪些常见的流程控制结构?
    掌握Python中的常见流程控制结构有哪几种? 在Python编程中,流程控制结构是一种强大的工具,用于控制程序的执行顺序和条件判断。在Python中,常见的流程控制结构包括条件语句、循环语句和异常处理语句。让我们逐一介绍这些结...
    99+
    2024-01-20
    Python 结构 流程控制
  • JAVA中的流控制语句有哪些
    本篇内容主要讲解“JAVA中的流控制语句有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA中的流控制语句有哪些”吧!与 C、 C++相 同 ,Java程 序 通 过 流 控 制 来 执...
    99+
    2023-06-03
  • Python中的常见流程控制结构有哪些?
    Python中常见的流程控制结构有哪几种? 在Python中,流程控制结构是用来决定程序的执行顺序的重要工具。它们允许我们根据不同的条件执行不同的代码块,或者重复执行一段代码。下面将介绍Python中常见的流程控制结构,并提供相...
    99+
    2024-01-20
    for if-else while
  • vba程序流程控制的方式有哪些
    这篇文章主要介绍vba程序流程控制的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vba程序流程控制的方式是:选择控制(分支控制)、循环控制和顺序控制。VBA是一种结构化的程序设计方式,结构化的程序设计方式...
    99+
    2023-06-14
  • Python中常见的流程控制结构有哪些?
    Python中有四种常见的流程控制结构,分别是顺序结构、条件结构、循环结构和跳转结构。下面将一一介绍并提供相应的代码示例。 顺序结构:顺序结构是程序从上到下按照预定的顺序执行的结构,没有特定的关键字或语法。示例代码:print(...
    99+
    2024-01-20
    结构 流程控制
  • linux shell流程控制语句有哪些
    本篇内容主要讲解“linux shell流程控制语句有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux shell流程控制语句有哪些”吧!一、shell条件语句(if用法)if语句结...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作