Golang流程控制

流程控制

1.条件语句

样例代码如下:

if a<5 {
    return 0 
} else {
    return 1
}

注意:

1.条件语句不需要使用括号将条件包含起来();

2.无论语句体内有几条语句,花括号{}都是必须存在的;

3.!!!左花括号{必须与if或者else处于同一行,不可以提行另起

4.在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔;

5.在有返回值的函数中,不允许将“最终的”return语句包含在if...else...结构中,否则会编译失败:

function ends without a return statement。

失败的原因在于,Go编译器无法找到终止该函数的return语句。编译失败的案例如下:

func example(x int) int {
    if x==0 {
        return 5
    } else {
        return x
    }
}

2.选择语句

样例代码如下:

switch i {
    case 0:
        fmt.printf("0")
    case 1:
        fmt.printf("1")
    case 2:
        fallthrough
    case 3:
        fmt.printf("3")
    case 4,5,6:
        fmt.printf("4,5,6")
    default:
        fmt.printf("Default")
}

注: default语句不是必须的。 switch case 语句是一个条件选择语句,找到相同的case值做为入口,执行后面的程序;若所有的case都不满足,则找default入口;若未找到则退出整个switch语句。 所以default只是一个备用的入口,有没有都无所谓。

比较有意思的是,switch后面的表达式甚至不是必需的,比如下面的例子:
switch {
    case 0 <= Num && Num <=3:
       fmt.printf("0-3")
    case 4 <= Num && Num <=6:
       fmt.printf("4-6")
    case 7 <= Num && Num <=9:
       fmt.printf("7-9")
}
switch {
    case false:
       fmt.println("1")
       fallthrough
    case true:
       fmt.println("2")
       fallthrough
    case false:
       fmt.println("3")
       fallthrough
}
第二段代码的输出结果为:
2
3

注:可以看到第2段代码第3个case语句哪怕是false也仍旧执行了,这就是fallthrough语句的作用:

fallthrough语句强制执行后面的case代码,fallthrough不会判断下一条case的expr结果是否为true

注意:

1.左花括号{必须与switch处于同一行;

2.条件表达式不限制为常量或者整数;

3.单个case中,可以出现多个结果选项;

4.与C,JAVA语言等规则相反,Go语言不需要用break来明确退出一个case!!!!!!

5.可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同。


3.循环语句

与多数语言不同的是,Go语言中的循环语句只支持for关键字,而不支持while和do-while结构。

关键字for的基本使用方法与C和C++中非常接近:

for i:=0;i<5;i++ {
    sum+=i
}

可以看到比较大的一个不同在于for后面的条件表达式不需要用圆括号()包含起来。

虽然Go语言中没有while和do-while循环,但同时还是考虑了无限循环的场景,让开发者不用写无聊的for (;;) {} 和 do {} while(1);,可以简化为以下的写法:
sum := 0
for {
    sum++
    if sum > 100 {
        break
    }
}
在条件表达式中也支持多重赋值,如下所示:
a:=[]int {1,2,3,4,5,6}
for i,j:=0,len(a)-1;i<j;i,j=i+1,j-1 {
    a[j],a[i]=a[i],a[j]
}

注意:

1.左花括号{必须与for处于同一行。

2.Go语言中的for循环与C语言一样,都允许在循环条件中定义和初始化变量,唯一的区别是,Go语言不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。

3.Go语言的for循环同样支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环。如:

for j:=0;j<5;j++ {
    for i:=0;i<10;i++ {
        if i>5 {
            break JLoop
        }
    fmt.printf(i)
    }
}
JLoop:
//...

上面的代码中break语句终止的是JLoop标签处的外层循环。?刚刚跑了一趟没成功?JLoop无法解析是什么


4.跳转语句

注意:goto语句被多数语言学者所反对,谆谆告诫不要使用。但对于Go语言这样一个惜关键字如金的语言来说,居然仍然支持goto关键字,无疑让某些人跌破眼镜。但就个人一年多来的Go语言编程经验来说,goto还是会在一些场合下被证明是最合适的。

goto语句的语义非常简单,就是跳转到本函数内的某个标签,如:
func myfunc() {
    i := 0
    HERE:
    fmt.println(i)
    i++
    if i<10 {
        goto HERE
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值