• 4. Go的流程控制


    Go的流程控制

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

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

    if else

    推荐if后面不适用括号,当然也可以使用括号括起来

    func main() {
    	var num = 10
    	if num == 10 {
    		fmt.Println("hello == 10")
    	} else if(num > 10) {
    		fmt.Println("hello > 10")
    	} else {
    		fmt.Println("hello < 10")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    if的另外一种写法,下面的方法的区别是 num2是局部变量

    if num2:= 10; num2>=10 {
        fmt.Println("hello >=10")
    }
    
    • 1
    • 2
    • 3

    for 循环结构

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

    for循环的基本格式如下:

    for 初始语句; 条件表达式; 结束语句 {
    	循环体
    }
    
    • 1
    • 2
    • 3

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

    实例:打印1 ~ 10

    for i := 0; i < 10; i++ {
        fmt.Printf("%v ", i+1)
    }
    
    • 1
    • 2
    • 3

    注意,在Go语言中,没有while语句,我们可以通过for来代替

    for {
        循环体
    }
    
    • 1
    • 2
    • 3

    for循环可以通过break、goto、return、panic语句退出循环

    for range(键值循环)

    Go 语言中可以使用for range遍历数组、切片、字符串、map及通道(channel)。通过for range遍历的返回值有以下规律:

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

    实例:遍历字符串

    var str = "你好golang"
    for key, value := range str {
        fmt.Printf("%v - %c ", key, value)
    }
    
    • 1
    • 2
    • 3
    • 4

    遍历切片(数组)

    var array = []string{"php", "java", "node", "golang"}
    for index, value := range array {
        fmt.Printf("%v %s ", index, value)
    }
    
    • 1
    • 2
    • 3
    • 4

    switch case

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

    extname := ".a"
    switch extname {
    	case ".html": {
    		fmt.Println(".html")
    		break
    	}
    	case ".doc": {
    		fmt.Println(".doc")
    		break
    	}
    	case ".js": {
    		fmt.Println(".js")
    	}
    	default: {
    		fmt.Println("其它后缀")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    switch的另外一种写法

    switch extname := ".a"; extname {
    	case ".html": {
    		fmt.Println(".html")
    		break
    	}
    	case ".doc": {
    		fmt.Println(".doc")
    		break
    	}
    	case ".js": {
    		fmt.Println(".js")
    	}
    	default: {
    		fmt.Println("其它后缀")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    同时一个分支可以有多个值

    extname := ".txt"
    switch extname {
    	case ".html": {
    		fmt.Println(".html")
    		break
    	}
    	case ".txt",".doc": {
    		fmt.Println("传递来的是文档")
    		break
    	}
    	case ".js": {
    		fmt.Println(".js")
    	}
    	default: {
    		fmt.Println("其它后缀")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    tip:在golang中,break可以不写,也能够跳出case,而不会执行其它的。

    如果我们需要使用switch的穿透 fallthrought,fallthrough语法可以执行满足条件的 case 的下一个case,为了兼容c语言中的case设计

    extname := ".txt"
    switch extname {
    	case ".html": {
    		fmt.Println(".html")
    		fallthrought
    	}
    	case ".txt",".doc": {
    		fmt.Println("传递来的是文档")
    		fallthrought
    	}
    	case ".js": {
    		fmt.Println(".js")
    		fallthrought
    	}
    	default: {
    		fmt.Println("其它后缀")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    fallthrought 只能穿透紧挨着的一层,不会一直穿透,但是如果每一层都写的话,就会导致每一层都进行穿透

    break:跳出循环

    Go语言中break 语句用于以下几个方面:

    • 用于循环语句中跳出循环,并开始执行循环之后的语句。
    • break在switch(开关语句)中在执行一条case后跳出语句的作用。
    • 在多重循环中,可以用标号label标出想break的循环。
    var i = 0
    for  {
        if i == 10{
            fmt.Println("跳出循环")
            break
        }
        i++
        fmt.Println(i)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    go:跳转到指定标签

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

    	var n = 20
    	if n > 24 {
    		fmt.Println("成年人")
    	} else {
    		goto lable3
    	}
    
    	fmt.Println("aaa")
    	fmt.Println("bbb")
    lable3:
    	fmt.Println("ccc")
    	fmt.Println("ddd")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    Vulnhub DC2
    springboot+清远旅游推荐网站 毕业设计-附源码211551
    【RabbitMQ 实战】10 消息持久化和存储原理
    2022年数维杯国际赛D题 极端天气损失评估与应对策略
    竞赛 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉
    四川赢涟电子商务有限公司可靠吗?正规吗?
    Express 5 快速入门 - 静态文件
    通过命令行进行R8混淆
    win11右键显示更多选项关闭的四种方法
    Java学习笔记5.4.2 Map接口 - TreeMap类
  • 原文地址:https://blog.csdn.net/wangzhicheng987/article/details/126698821