• 【go语言】条件,选择,循环和特殊语句


    if语句

    a:=10
    if a>20{
    	fmt.Printf("a大于20")
    }else if a<10{
    	fmt.Printf("a小于10")
    }else{
    	fmt.Printf("a大于等于10,a小于等于20")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    go语言的if语句和C语言的if语句的差不多,需要注意的是else 和else if要写在括号右边;go语言的if语句还可以有一个子语句

    if语句的子语句

    if语句的子语句的作用是用来初始化局部变量

    if a:=10;a<20{
        fmt.Printf("a小于20")
    }else{
        fmt.Printf("a小于20")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    但要注意的是,子语句中只能有一个表达式

    switch语句

    Go 语言中,switch 表示选择语句的关键字, switch 语句会根据初始化表达式得出一个值,然后根据 case 语句的条件,执行相应的代码块, 最终返回特定内容。每个 case被称为一种情况,只有当初始化语句的值符合 case 的条件语句时, case才会被执行 。如果没有遇到符合的 case,则可以使用默认的 case (default case),如果己经遇到了符合的 case , 那么后面的 case 都不会被执行。
    switch语句有两种类型

    • 表达式switch
    • 类型switch

    表达式switch

    表达式switch的一种写法和C语言的switch类似,不过没有break语句。

    	grade:=80
    	switch grade{
    	case 60:
    		fmt.Println("及格")
    	case 80:
    		fallthrough
    	case 90:
    		fmt.Println("优秀")
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    fallthrough关键字的作用是把case的控制权交给下一个case,这个程序输出优秀
    在这里插入图片描述

    grade:=80
    switch{
    	case grade>=60:
    		fmt.Println("及格了")
    	case grade<60:
    		fmt.Println("没有及格")
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    类型switch

    var x interface{}
    x=1
    switch i:=x.(type){
    case int:
    	fmt.Printf("x的类型是%T\n",i)
    case float64:
    	fmt.Printf("x的类型是%T",i)
    default:
    	fmt.Println("其他类型");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    类型switch判断的变量必须是具有接口类型的变量

    循环语句

    go语言只有for循环没有while循环

    for循环的几种形式

    for initialization;condition;post{}

    for i:=0;i<5;i++{
    	fmt.Println(i)
    } 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    1for ;condition;post{}

    for ;i<5;i++{
    	fmt.Println(i)
    }
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    for condition{} 相当于while循环

    for{} 死循环

    for range

    str:="abcd"
    for i,ch:=range str{
    	fmt.Printf("字符串的第%d个字符值为%d",i,ch)
    }
    for _,ch:=range str{
    	fmt.Println(ch)
    }
    for i,_:=range str{
    	fmt.Println(i)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    for和range结合可以轮询字符串的每一个字符,这种方式也可以用来轮询数组、切片、字典等。range返回的是一对 索引–值

    range的返回值

    右边表达式的类型第一个值第二个值
    stringindexstr[index]
    arr/sliceindexarr[index]/slice[index]
    mapkeymap[key]

    延迟语句defer

    defer用来延迟调用一个函数(在函数的最后执行),只能在一个函数内部使用
    而且函数是执行完所有defer语句才执行return语句的。

    func main(){
    	defer fmt.Println("好")
    	fmt.Println("你")
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    那么在一个函数内有多个defer语句会以什么顺序执行?
    最后的defer语句最先执行,defer语句就是一个栈。

    func main(){
    	for i:=0;i<5;i++{
    		defer fmt.Println(i)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    break语句

    var i int =0
    for{
    	if i>5{
    		break
    	}
    	i++
    	fmt.Println("for循环结束了?")
    }
    fmt.Println("for循环结束了")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    go语言的break有一个比较坑的地方

    for{
    	grade:=80
    	switch{
    	case grade>60:
    		fmt.Println("及格了")
    		break
    	case grade==60:
    		fmt.Println("差点没及格")
    	case grade<60:
    		fmt.Println("没有及格")
    
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这个时候break根本就不会跳出for循环,也就是说这个循环还是个死循环!!!要想跳出这个循环就必须要用标签
    在这里插入图片描述

    loop:for{
    	grade:=80
    	switch{
    	case grade>60:
    		fmt.Println("及格了")
    		break loop
    	case grade==60:
    		fmt.Println("差点没及格")
    	case grade<60:
    		fmt.Println("没有及格")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

  • 相关阅读:
    图论09-桥和割点
    Unity⭐️Win和Mac安卓打包环境配置
    JAVA-元注解和注解
    扩展欧几里得算法的实现
    国产高云FPGA开发软件Gowin的下载、安装、Licence共享,按照我的方案保证立马能用,不能用你铲我耳屎
    电力安全事故安全培训3D仿真展馆绿色环保持久复用
    代理IP与Socks5代理:网络工程师的神奇魔法棒
    栈和队列 - C语言实现
    目的:ubuntu配置使用opengl - 初探-创建一个空窗口
    何时以及如何使用try、catch和throw关键字
  • 原文地址:https://blog.csdn.net/m0_72895175/article/details/133138722