Gol流程控制

条件语句

  1. if语句

    if 布尔表达式 {
    
    }else 布尔表达式{
    
    }else{
    
    }
    
    1. if语句后的{,一定要和if条件写在同一行,否则报错
    2. else一定要在if语句}之后,不能自己另起一行
  2. if语句变型写法

    if statement;conditon{//注意分号分隔
    
    }
    //statement中可以声明变量,初始化变量等操作,其定义的变量可以在if语句的任何部分访问,出了if语句就无法访问
    
  3. switch语句

    switch 变量 { //这个变量没有类型限制 
        case val1: //val1是一个具体值
         	...
        case val2:
        	...
        default:
        	...
    }
    
    1. switch可以作用在任何类型上,
    2. case后的数值必须与switch作用的变量类型一致
    3. case后的数据必须是唯一的,不能出现重复
    4. default语句是可选的
    5. if只能作用在布尔类型上
  4. switch语句的其他写法

    switch{ //省略switch后的变量,相当于变为switch true {}的形式,也就是swtich后有个隐式的变量,并且这个这个变量被赋值为true
        case true:
        	...
        case false:
        	...
    }
    
    v1 := 23   //case后的true形式,也可以是使用switch外部变量的表达式(能返回true或false)
    switch{
        case v1<50:
        	fmt.Println("aaaaaaaa")
        case v1>=50:
        	fmt.Println("bbbbbbbbbbbb")
    }
    
    switch{
    	case 数值1,数值2,数值3://case后可以跟随多个数值,也就是具有相同逻辑的分支条件可以写在一起
    		...
    	case 数值4,数值5:
    		...
    }
    
    switch 初始化表达式;变量{ //同if一样,初始化语句与变量用;分隔
        //初始化表达式中定义的变量,只能在switch语句中可以访问
    }
    
    //switch默认每个case最后带break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,但是可以用fallthrough强制执行后边的case代码。
    
    //fallthrough:用于穿透switch。当switch中某个case匹配成功之后,就执行该case语句,如果遇到fallthrough,那么后边紧邻的case,无需匹配,直接穿透执行。fallthrough必须放在case块的最后一行。
    
    
    switch v:=1;v {
        case 1:
        	fmt.Println(1)
        	fallthrough
        case 2:
        	fmt.Println(2)
    }
    
    1
    2
    
    fallthrough会是break失效,继续顺序执行下一个case,并且下一个case无需匹配,直接穿透执行
    
  5. for循环语句

    //标准写法
    for init;condition;post{}
    
    //省略表达式init,post
    //init;condition;post三个表达式都是可选的
    //省略表达式init,post;效果相当于其他语言的while(条件)
    for ;condition; { }//;可以保留也可以去掉
    for condition {}
    
    //同时省略三个表达式,相当于其他语言的while(true)永真
    for{ }
    
    //省略表达式condition,相当于condition设置为永真true
    for ; ; {}
    
    //其余写法 for表达式中同时省略几个表达式都可以
    省略init:初始条件可以写在for代码块之前
    省略condition:循环永远成立--死循环
    省略post:条件变化需要写在{}中,否则就是个死循环
    
    循环结束:
    条件不满足时,循环就结束了
    但是通过break和continue语句可以强制结束循环
    
    嵌套循环
    break和continue默认结束离的最近的里层循环
    如果先结束指定的某个循环,可以给指定循环贴标签(起名)
    
    out:for i:=0;i<5;i++{
    		for j:=0;j<3;j++{
    			fmt.Println(i,j)
    			if i ==2 {
    				break out
                    //continue out
    			}
    		}
    	}
    
  6. goto语句

    可以无条件的转移到程序中指定的行,通常配合条件语句使用。

    goto label
    .....
    .....
    label: statement
    
posted @ 2020-02-21 19:45  henryno12  阅读(185)  评论(0编辑  收藏  举报