流程控制之分支循环

在编写 Go 程序的时候,我们不仅会用前面学到的数据结构来存储数据,还会用到 if、switch、for 来进行条件判断和流程控制,今天我们就来一起学习下它们。

if

if 主要用于条件判断,语法为:

if 条件 {
  # 业务代码
}

先看一个简单例子:

package main

import "fmt"

func main() {
    age := 7

    if age > 6 {
        fmt.Println("It‘s primary school")
    }
}

我们可以在条件中使用 & 或 || 来进行组合判断:

package main

import "fmt"

func main() {
    age := 7

    if age > 6 && age <= 12 {
        fmt.Println("It‘s primary school")
    }
}

我们还可以使用 if..else if..else 来实现多分支的条件判断:

package main

import "fmt"

func main() {
    age := 13

    if age > 6 && age <= 12 {
        fmt.Println("It‘s primary school")
    } else if age > 12 && age <= 15 {
        fmt.Println("It‘s middle school")
    } else {
        fmt.Println("It‘s high school")
    }
}

switch

如果我们的条件分支太多,可以考虑使用 switch 替换 if, 例如:

package main

import "fmt"

func main() {
    age := 10

    switch age {
    case 5:
        fmt.Println("The age is 5")
    case 7:
        fmt.Println("The age is 7")
    case 10:
        fmt.Println("The age is 10")
    default:
        fmt.Println("The age is unkown")
    }
}

注意:在 Go 中 switch 只要匹配中了就会中止剩余的匹配项,这和 Java 很大不一样,它需要使用 break 来主动跳出。

switch 的 case 条件可以是多个值,例如:

package main

import "fmt"

func main() {
    age := 7

    switch age {
    case 7, 8, 9, 10, 11, 12:
        fmt.Println("It‘s primary school")
    case 13, 14, 15:
        fmt.Println("It‘s middle school")
    case 16, 17, 18:
        fmt.Println("It‘s high school")
    default:
        fmt.Println("The age is unkown")
    }
}

注意: 同一个 case 中的多值不能重复。

switch 还可以使用 if..else 作为 case 条件,例如:

package main

import "fmt"

func main() {
    age := 7

    switch {
    case age >= 6 && age <= 12:
        fmt.Println("It‘s primary school")
    case age >= 13 && age <= 15:
        fmt.Println("It‘s middle school")
    case age >= 16 && age <= 18:
        fmt.Println("It‘s high school")
    default:
        fmt.Println("The age is unkown")
    }
}

小技巧: 使用 switch 对 interface{} 进行断言,例如:

package main

import "fmt"

func checkType(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("%v is an in\n", v)
    case string:
        fmt.Printf("%v is a string\n", v)
    default:
        fmt.Printf("%v‘s type is unkown\n", v)
    }
}

func main() {
    checkType(8)
    checkType("hello, world")
}

for

使用 for 来进行循环操作,例如:

package main

import "fmt"

func main() {
    for i := 0; i < 2; i++ {
        fmt.Println("loop with index", i)
    }
}

使用 for..range 对数组、切片、map、 字符串等进行循环操作,例如:

package main

import "fmt"

func main() {
    numbers := []int{1, 2, 3}

    for i, v := range numbers {
        fmt.Printf("numbers[%d] is %d\n", i, v)
    }
}

注意: 这里的 i、v 是切片元素的位置索引和值。

package main

import "fmt"

func main() {
    cityCodes := map[string]int{
        "北京": 1,
        "上海": 2,
    }

    for i, v := range cityCodes {
        fmt.Printf("%s is %d\n", i, v)
    }
}

注意: 这里的 i、v 是 map 的 一组键值对的键和值。

使用 continue 和 break 对循环进行控制,例如:

package main

import "fmt"

func main() {
    numbers := []int{1, 2, 3, 4, 5}

    for i, v := range numbers {
        if v == 4 {
            break
        }

        if v%2 == 0 {
            continue
        }

        fmt.Printf("numbers[%d] is %d\n", i, v)
    }
}

注意:

break 会结束所有循环。
continue 会跳过当前循环直接进入下一次循环。

http://www.songjiayang.com/posts/liu-cheng-kong-zhi-zhi-fen-zhi-xun-huan

Golang零基础入门课程

网络课(腾讯课堂)

6.15正式开班上课

51reboot 今晚八点准时 go 分享,小伙伴们快来学习吧!添加小助手获取直播链接

51reboot?运维前端课程正在火热招生和中,想要学习的小伙伴可以找小助手咨询!
添加小助手WeChat:17812796384

原文地址:https://blog.51cto.com/51reboot/2410676

时间: 2024-07-28 20:00:46

流程控制之分支循环的相关文章

十七、流程控制之for循环

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _17.流程控制之for循环 {     class Program     {         static void Main(string[] args)         {             /**              * for循环语句              * 其语法:     

十五、流程控制之do循环

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _15.流程控制之do循环 {     class Program     {         static void Main(string[] args)         {             /**              * do...while循环语句              * 其语法

十六、流程控制之while循环

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _16.流程控制之while循环 {     class Program     {         static void Main(string[] args)         {             /**              * while循环语句              * 其语法:

SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环

原文:SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 上期回顾: SSIS从理论到实战,再到应用(4)----流程控制之For循环 上一期讲了For循环,Foreach循环相比而言要更复杂一点,里面涉及变量的类型,数据接收问题,下面我用一个简单的示例来演示Foreach循环容器: 假设我们有这样一个需求: 从数据库中取出一列数据,循环输出这列数据的每个值 一,拖入sql任务,定义一个Object类型的变量接收取到的数据 二,设置好接收变量 三,拖入Foreach循环容器

SSIS从理论到实战,再到应用(4)----流程控制之For循环

原文:SSIS从理论到实战,再到应用(4)----流程控制之For循环 上期回顾: SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 在SSIS体系中,控制流可能经常会遇到,比如你取得一列数据,需要循环这列数据然后做相应的操作时,就需要用到循环,下面,我来操作两种循环方式,FOR循环和Foreach循环. 一,For循环 写过代码的知道,For循环的常用写法是这样的:For(var i = 0 ; i < 10 ; i++){  //do sth;}; 这里面包含三个

流程控制之if...elif...else和流程控制之while循环

一.流程控制之if...elif...else 1.如果:女人年龄大于28岁,那么:叫大姐姐,否则:叫小姐姐 old_grid=28 if old_grid > 28: print('大姐姐') else print('小姐姐') 2.如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:gd,如果:表白成功,那么:在一起,如果不成功,那么:mmp old_grid=21 height=170 weight=99 is_prett

part4-2 流程控制二(循环结构,while、for循环,列表推导式、生成器推导式,常用工具函数,控制循环结构,4个简单实例)

循环语句在循环条件满足时,可反复执行某一段代码,这段被重复执行的代码称为循环体.在循环体中,需要在合适的时候把循环条件设置为假,从而结束循环:否则循环一直执行下去形成死循环.循环语句通常包含如下4个部分.(1).初始化语句(init_statements):在循环开始前执行,有一条或多条语句,用于完成一些起初始化工作.(2).循环条件(test_expression):一个布尔表达式,决定是否执行循环体.(3).循环体(body_statements):循环的主体,根据循环条件是否允许,这个代码

Java基本语法-2(流程控制-判断、循环)

本章我们继续讲解Java基础语法,主要介绍流程控制即if-else及switch-case判断.for和wile及do-while循环. 程序执行可分为顺序结构(即程序从上到下逐行执行).分支结构(根据条件判断,不同的情况执行不同的代码块).循环结构(满足循环条件则重复执行某段代码). 条件判断 一.if 语句三种格式 1.if(true){ 执行代码块      } 2.if(条件表达式){ 执行代码块      } else { 执行代码块  } 3.if(条件表达式){ 执行代码块    

JavaScript基础4——关于语句流程控制(分支语句、循环语句等)

分支语句 (1)if...else...语句,基本格式分三种,如下 1 <script type="text/javascript"> 2 var i=50; 3 //if语句 4 if (条件) 5 { 6 条件成立时执行代码 7 } 8 9 //if...else语句 10 if (条件) 11 { 12 条件成立时执行此代码 13 } 14 else 15 { 16 条件不成立时执行此代码 17 } 18 19 //if...else if...else if...e