流程控制

1. 条件语句

  1. //在if之后条件语句之前可以添加变量初始化语句,用;号隔离
  2. if <条件语句> { //条件语句不需要用括号括起来,花括号必须存在
  3. //语句体
  4. }else{
  5. //语句体
  6. }
  7. //在有返回值的函数中,不允许将最后的return语句放在if...else...的结构中,否则会编译失败
  8. //例如以下为错误范例
  9. func example(x int) int{
  10. if x==0{
  11. return 5
  12. }else{
  13. return x //最后的return语句放在if-else结构中,所以编译失败
  14. }
  15. }

2. 选择语句

  1. //1、根据条件不同,对应不同的执行体
  2. switch i{
  3. case 0:
  4. fmt.Printf("0")
  5. case 1: //满足条件就会退出,只有添加fallthrough才会继续执行下一个case语句
  6. fmt.Prinntf("1")
  7. case 2,3,1: //单个case可以出现多个选项
  8. fmt.Printf("2,3,1")
  9. default: //当都不满足以上条件时,执行default语句
  10. fmt.Printf("Default")
  11. }
  12. //2、该模式等价于多个if-else的功能
  13. switch {
  14. case <条件表达式1>:
  15. 语句体1
  16. case <条件表达式2>:
  17. 语句体2
  18. }

3. 循环语句

  1. //1、Go只支持for关键字,不支持while,do-while结构
  2. for i,j:=0,1;i<10;i++{ //支持多个赋值
  3. //语句体
  4. }
  5. //2、无限循环
  6. sum:=1
  7. for{ //不接条件表达式表示无限循环
  8. sum++
  9. if sum > 100{
  10. break //满足条件跳出循环
  11. }
  12. }
  13. //3、支持continue和break,break可以指定中断哪个循环,break JLoop(标签)
  14. for j:=0;j<5;j++{
  15. for i:=0;i<10;i++{
  16. if i>5{
  17. break JLoop //终止JLoop标签处的外层循环
  18. }
  19. fmt.Println(i)
  20. }
  21. JLoop: //标签处
  22. ...

4. 跳转语句

  1. //关键字goto支持跳转
  2. func myfunc(){
  3. i:=0
  4. HERE: //定义标签处
  5. fmt.Println(i)
  6. i++
  7. if i<10{
  8. goto HERE //跳转到标签处
  9. }
  10. }