返回顶部
首页 > 资讯 > 后端开发 > GO >Golang通脉之流程控制详情
  • 750
分享到

Golang通脉之流程控制详情

2024-04-02 19:04:59 750人浏览 独家记忆
摘要

目录1、if else(分支结构)1.1 if条件判断基本写法1.2 if条件判断特殊写法2、for(循环结构)2.1 无限循环3、for range(键值循环)4、switch c

前言:

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。

Go语言中最常用的流程控制有iffor,而switchgoto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

1、if else(分支结构)

1.1 if条件判断基本写法

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


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

当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3。 if判断中的else ifelse都是可选的,可以根据实际需要进行选择。

关于 if 条件语句的使用有一些规则:

  • if 后面的条件表达式不需要使用 (),这和有些编程语言不一样,也更体现 Go 语言的简洁;
  • 每个条件分支(if 或者 else)中的大括号是必须的,哪怕大括号里只有一行代码(如示例);
  • if 紧跟的大括号 { 不能独占一行,else 前的大括号 } 也不能独占一行,否则会编译不通过;
  • if……else 条件语句中还可以增加多个 else if,增加更多的条件分支。

1.2 if条件判断特殊写法

if条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断:


func main() {
    if i:=6; i >10 {
        fmt.Println("i>10")
    } else if  i>5 && i<=10 {
        fmt.Println("5<i<=10")
    } else {
        fmt.Println("i<=5")
    }
}

2、for(循环结构)

Go 语言中的所有循环类型均可以使用for关键字来完成。

for循环的基本格式如下:


for 初始语句;条件表达式;更新语句{
    循环体语句
}

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。


func forDemo() {
 for i := 0; i < 10; i++ {
  fmt.Println(i)
 }
}

for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,例如:


func forDemo2() {
 i := 0
 for ; i < 10; i++ {
  fmt.Println(i)
 }
}

for循环的初始语句和结束语句都可以省略,例如:


func forDemo3() {
 i := 0
 for i < 10 {
  fmt.Println(i)
  i++
 }
}

这种写法类似于其他编程语言中的while,在while后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。

2.1 无限循环


for {
    循环体语句
}

for循环可以通过breakgotoreturnpanic语句强制退出循环。

Go 语言中,同样支持使用 continuebreak 控制 for 循环:

continue 可以跳出本次循环,继续执行下一个循环。

break 可以跳出整个 for 循环,哪怕 for 循环没有执行完,也会强制终止。

3、for range(键值循环)

Go语言中可以使用for range遍历数组、切片、字符串map 及通道(channel)。

通过for range遍历的返回值有以下规律:

  • 数组、切片、字符串返回索引和值。
  • map返回键和值。
  • 通道(channel)只返回通道内的值。

注意:

与 for 不同的是,range 对每个迭代值都创建了一个拷贝。因此如果每次迭代的值内存占用很小的情况下,for 和 range 的性能几乎没有差异,但是如果每个迭代值内存占用很大,这种情况下差距就非常明显了。

简单的例子证明 range 迭代时,返回的是拷贝。


persons := []struct{ no int }{{no: 1}, {no: 2}, {no: 3}}
for _, s := range persons {
    s.no += 10
}
for i := 0; i < len(persons); i++ {
    persons[i].no += 100
}
fmt.Println(persons) // [{101} {102} {103}]

  • persons 是一个长度为 3 的切片,每个元素是一个结构体。
  • 使用 range 迭代时,试图将每个结构体的 no 字段增加 10,但修改无效,因为 range 返回的是拷贝。
  • 使用 for 迭代时,将每个结构体的 no 字段增加 100,修改有效

range 在迭代过程中返回的是迭代值的拷贝,如果每次迭代的元素的内存占用很低,那么 for 和 range 的性能几乎是一样,例如 []int。但是如果迭代的元素内存占用较高,例如一个包含很多属性的 struct 结构体,那么 for 的性能将显著地高于range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 for,如果使用 range,建议只迭代下标,通过下标访问迭代值,这种使用方式和 for 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。

4、switch case

使用switch语句可方便地对大量的值进行条件判断。


func switchDemo1() {
 finger := 3
 switch finger {
 case 1:
  fmt.Println("大拇指")
 case 2:
  fmt.Println("食指")
 case 3:
  fmt.Println("中指")
 case 4:
  fmt.Println("无名指")
 case 5:
  fmt.Println("小拇指")
 default:
  fmt.Println("无效的输入!")
 }
}

Go语言规定每个switch只能有一个default分支。

一个分支可以有多个值,多个case值中间使用英文逗号分隔。


func testSwitch3() {
 switch n := 7; n {
 case 1, 3, 5, 7, 9:
  fmt.Println("奇数")
 case 2, 4, 6, 8:
  fmt.Println("偶数")
 default:
  fmt.Println(n)
 }
}

分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量:


func switchDemo4() {
 age := 30
 switch {
 case age < 25:
  fmt.Println("好好学习吧")
 case age > 25 && age < 35:
  fmt.Println("好好工作吧")
 case age > 60:
  fmt.Println("好好享受吧")
 default:
  fmt.Println("活着真好")
 }
}

在 Go 语言中,switch case 从上到下逐一进行判断,一旦满足条件,立即执行对应的分支并返回,其余分支不再做判断。也就是说 Go 语言的 switch 在默认情况下,case 最后自带 break。这和其他编程语言不一样,比如 C 语言在 case 分支里必须要有明确的 break 才能退出一个 case。Go 语言的这种设计就是为了防止忘记写 break 时,下一个 case 被执行。

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


func switchDemo5() {
 s := "a"
 switch {
 case s == "a":
  fmt.Println("a")
  fallthrough
 case s == "b":
  fmt.Println("b")
 case s == "c":
  fmt.Println("c")
 default:
  fmt.Println("...")
 }
}

输出:

a
b

5、goto(跳转到指定标签)

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

 例如双层嵌套的for循环要退出时:


func gotoDemo1() {
 var breakFlag bool
 for i := 0; i < 10; i++ {
  for j := 0; j < 10; j++ {
   if j == 2 {
    // 设置退出标签
    breakFlag = true
    break
   }
   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循环")
}

6、break(跳出循环)

break语句可以结束forswitchselect的代码块。

break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的forswitchselect的代码块上。 举个例子:


func breakDemo1() {
BREAKDEMO1:
 for i := 0; i < 10; i++ {
  for j := 0; j < 10; j++ {
   if j == 2 {
    break BREAKDEMO1
   }
   fmt.Printf("%v-%v\n", i, j)
  }
 }
 fmt.Println("...")
}

7、continue(继续下次循环)

continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。

continue语句后添加标签时,表示开始标签对应的循环。例如:


func continueDemo() {
forloop1:
 for i := 0; i < 5; i++ {
  // forloop2:
  for j := 0; j < 5; j++ {
   if i == 2 && j == 2 {
    continue forloop1
   }
   fmt.Printf("%v-%v\n", i, j)
  }
 }
}

到此这篇关于golang通脉之流程控制详情的文章就介绍到这了,更多相关Golang通脉之流程控制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang通脉之流程控制详情

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

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

猜你喜欢
  • Golang通脉之流程控制详情
    目录1、if else(分支结构)1.1 if条件判断基本写法1.2 if条件判断特殊写法2、for(循环结构)2.1 无限循环3、for range(键值循环)4、switch c...
    99+
    2024-04-02
  • Golang通脉之map详情
    目录1、定义2、基本使用3、判断键是否存在4、map的遍历5、delete()函数删除map元素6、指定顺序遍历map7、map类型的切片8、value为切片类型的map9、map是...
    99+
    2024-04-02
  • Golang通脉之方法详情
    目录方法和接收者指针类型的接收者值类型的接收者方法和函数任意类型添加方法方法继承方法重写结构体和方法补充方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数...
    99+
    2024-04-02
  • Golang通脉之数据类型详情
    目录1、标识符与关键字1.1 标识符1.2 关键字2、变量2.1 什么是变量2.2 变量类型2.3 变量声明3、常量3.1 iota4、基本数据类型4.1 整型4.2 浮点型4.3 ...
    99+
    2024-04-02
  • Go语言流程控制详情
    目录1、流程控制2、if 语句3、goto4、for语句5、switch1、流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑。...
    99+
    2024-04-02
  • Python执行流程控制详情
    目录一 引子二 分支结构2.1 什么是分支结构2.2 为什么要用分支结构2.3 如何使用分支结构2.3.1 if语法2.3.2 if应用案例三 循环结构3.1 什么是循环结构3.2 ...
    99+
    2024-04-02
  • golang 流程控制
    Golang 是一种高效而现代的编程语言,其在流程控制方面提供了丰富的功能。本文将探讨 Golang 中的流程控制结构,包括条件语句、循环语句和跳转语句,以帮助读者更好地理解和应用这些结构。条件语句Golang 中的条件语句包括 if 语句...
    99+
    2023-05-14
  • Golang流程控制语句详解
    go 语言中的流程控制语句有三种类型:条件语句、循环语句和跳跃语句。条件语句根据布尔表达式的真假值控制程序流向;循环语句用于重复执行代码块;跳跃语句用于显式控制程序流向,包括退出循环、跳...
    99+
    2024-04-03
    golang 流程控制语句
  • Python控制流程:通往编程之巅的阶梯
    条件语句 条件语句(if-else)允许程序基于指定条件执行代码块。语法如下: if condition: # 代码块 1 else: # 代码块 2 循环语句 循环语句重复代码块,直到满足特定条件。Python 中有两种...
    99+
    2024-03-13
    控制流程
  • Python绘制交通流折线图详情
    目录一、数据集下载二、折线图绘制1、解压npz文件2、折线图绘制一、数据集下载 加州高速公路PEMS数据集 这里绘制PEMS04中的交通流量数据。该数据集中包含旧金山2018年1月1...
    99+
    2024-04-02
  • Golang中常用的流程控制语句详解
    Golang中常用的流程控制语句详解Golang作为一门面向并发的静态编程语言,提供了丰富的流程控制语句来实现复杂的逻辑和条件判断。本文将详细介绍Golang中常用的流程控制语句,包括if语句、switch语句、for语句等,并且提供具体的...
    99+
    2023-12-23
    switch语句 for循环 if条件判断
  • Golang控制通道实现协程等待详解
    目录前言方法一-睡眠等待方法二-通道什么是通道通道的特性什么是非缓冲通道什么是缓冲通道通道的简单使用非缓冲通道缓冲通道小心死锁使用通道实现协程等待前言 上一次简单了解了协程的工作原理...
    99+
    2022-11-21
    Golang通道实现协程等待 Go实现协程等待
  • 如何在 Golang 中通过错误来控制程序流?
    在 go 中,错误是一种特殊值,用于优雅地处理操作失败,并允许您调整程序流,方法是:在函数签名中返回错误。判断错误是否为 nil,以确定操作是否成功。根据需要调整程序流,例如处理错误或返...
    99+
    2024-05-14
    错误处理 程序流 golang
  • C#流程控制详解
    目录流程控制语句分类1、if语句2、switch3、三位运算符4、迭代语句之while语句4.1 迭代语句概述4.2 while语句5、迭代语句之do……...
    99+
    2024-04-02
  • PHP控制流程详解
    【PHP控制流程详解】 在PHP编程中,控制流程是指如何让程序按照我们所期望的顺序执行代码,通过控制流程,我们可以实现条件判断、循环执行和跳转等功能。本文将详细讨论PHP中常用的控制流...
    99+
    2024-03-11
    php 详解 控制流程
  • 流程控制之for循环
    while循环与 for循环:   1. while循环:称之为条件循环,循环次数取决于条件何时为False     for循环:循环次数取决于数据包含的元素的个数   2. for循环专门用来取值,在循环取值方面比while循环要强大,...
    99+
    2023-01-30
    流程
  • 流程控制之if判断
    目录 语法(掌握) if if...else if...elif...else 练习(掌握) ...
    99+
    2023-01-31
    流程
  • python3之控制流程(if,whil
                                      python3之控制流程1.流程控制:if(判断真假):          如果是真执行(缩进) else:          如果是假执行2.逻辑控制:x = raw_i...
    99+
    2023-01-31
    流程 whil
  • Python控制流程:驾驭代码之流
    条件语句用于根据条件布尔表达式的值来执行不同的代码块。Python 中常用的条件语句包括: if-elif-else:根据多个条件检查,执行不同的代码块。 while:当条件为真时,重复执行代码块。 for:对序列或范围中的元素进行迭代...
    99+
    2024-03-13
    控制流程
  • golang流程控制语句有哪些
    流程控制语句:1、if语句,由一个布尔表达式后紧跟一个或多个语句组成;2、“if…else”语句,else中的表达式在布尔表达式为false时执行;3、switch语句,用于基于不同条件执行不同动作;4、select语句;5、for循环语句...
    99+
    2023-05-14
    流程控制 go语言 Golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作