Go分支和循环 | 青训营

47 阅读6分钟

分支结构

当情况不同对应的操作不同时,需要使用到分支循环

if else

格式:

if 表达式1 {

       操作1

} else {

       操作2

}

操作3

--------------------------------------------------------------------------------------

若表达式1为true,则只执行操作1,然后继续执行操作3

若表达式1为false,则只执行操作2,然后继续执行操作3

或者

if 表达式1 {

       操作1

} else if 表达式2 {

       操作2

} else if 表达式3 {

       操作3

} …… else if 表达式n {

       操作n

} else {

      操作n+1

}

操作n+2

表达式1~n中,哪个成立则只执行对应的操作,然后执行操作n+2

若表达式1~n都不成立,则执行else中的内容(操作n+1),然后继续执行操作n+2

注意:if 匹配的 { 必须和 if 表达式 放在同一行

            与else匹配的{必须与else写在同一行,与上一个ifelse if匹配的右边的大括号也必须和else写在同一行。

switch case

可以用来对变量的值进行不同操作

格式:

switch 变量名 {

     case 值1 :    

         操作1

     case 值2 :

         操作2

     case 值3 :

         操作3

     ……

         ……

     case 值n :

         操作n

     default:

         操作n+1

}

若满足值1~n中的一个,则执行操作n

若值1~n都不满足,则执行default后的内容,即操作n+1

只能执行一个 操作,执行完此操作后直接跳出switch

如果需要再执行完当前操作时,还需要执行switch中下一个操作 则需要在当前操作的最后一行加上fallthrough

若多个值对应的操作一样

switch 变量名 {

     case 值1 ,值2 ,值3:

         操作1

     case 值4,值5,值6:

         操作2

     default:

         操作3

}

执行基本如上

值的位置也可以是表达式 例如:

var num = 0  
fmt.Scanf("%d", &num)  
fmt.Println(num)  
switch {  
case num%2 == 0:  
fmt.Println("偶数")  
case num%2 != 0:  
fmt.Println("奇数")  
}

循环结构

go里只有for循环

for

格式

for 初始条件1;循环继续条件2;结束语句3 {

     循环体语句4

}

执行流程:

开始执行一次 1 ,之后判断2是否成立,若2为false则跳出for循环

                                                                若2为true则执行4,然后执行3。到这里,第一次循环结束。然后判断2……之后如上


其他格式1

初始条件1

for ;循环继续条件2;结束语句3 {

     循环体语句4

}


其他格式2

初始条件1

for 循环继续条件2 {

     循环体语句4

     结束语句3

}


其他格式3 无限循环

for {

     循环体语句4

}

for range(键值循环)

格式:

var str string = "abc"

for i,v := range str {

}

i表示索引,任意标识符都可,不一定是i

v表示索引对应的值,任意标识符都可,不一定是v

例如

package main  
  
import "fmt"  
  
func main() {  
 var name = "12356"  
 for i, v := range name {  
 fmt.Printf("%d(%c)\n", i, v)  
 }  
}

输出

0(1)
1(2)
2(3)
3(5)
4(6)

break

跳出全部循环

package main  
  
import "fmt"  
  
func main() {  
  for i := 1; i <= 10; i++ {  
      if i == 5 {  
         break  
      }  
      fmt.Printf("%d ", i)  
  }  
}
 fmt.Printf("%d ", 1000)

当i等于5时,执行break,然后执行fmt.Printf("%d ", 1000)操作

输出

1 2 3 4 1000

continue

跳出当前循环,并没有跳出全部循环,继续执行下一次循环

package main  
  
import "fmt"  
  
func main() {  
    for i := 1; i <= 10; i++ {  
    if i == 5 {  
       continue  
    }  
    fmt.Printf("%d ", i)  
    }  
}

当i等于5时,执行continue,然后执行i++(结束语句)操作,然后i等于6,正常执行

输出

1 2 3 4 6 7 8 9 10 

goto

方便快速跳出循环

格式:

goto XXX 1

XXX: 2

1,2没有顺序,随便放, 但是 ,一般不建议使用太多,容易使程序混乱,代码可读性变差

package main  
  
import "fmt"  
  
func main() {  
    for i := 1; i <= 10; i++ {  
    if i == 5 {  
        goto end  
    }  
    fmt.Printf("%d ", i)  
    }  
end:  
    fmt.Printf("%d ", 1000)  
}

输出

1 2 3 4 1000