5.1 if-else结构

if else语句和其他语言大同小于。
if语句可以有表达式:

  1. package main
  2. import "fmt"
  3. func main() {
  4. i := 123
  5. if k := i - 1; k > 100 {
  6. fmt.Println("k: ", k)
  7. }
  8. }

在if花括号内定义的变量,和if语句之外的是不相同的,外部的会暂时被隐藏。

  1. package main
  2. import "fmt"
  3. func main() {
  4. i := 123
  5. if k := i - 100; k > 100 {
  6. var k = 99
  7. fmt.Println("k: ", k) //99
  8. } else {
  9. fmt.Println("k: ", k) //23
  10. }
  11. }

5.2 switch结构

switch var1 {
case val1:

case val2:

default:

}
var1可以是任意类型,但是val1,val2,。。。则必须是同类型的。
顺序执行,执行case匹配上。不需要break来结束。
在case内,可以使用fallthrough语句来让匹配上了该case,也不退出,继续执行下面的语句。
case 1 : fallthrough
default语句相当于if else的else,是匹配不上才执行的。

5.3 for结构

for是循环结构。
for结构一般使用三种场景:

  1. - for i :=1;i < 5;i++{}
  2. - for i > 10{}
  3. - for i := rang var{}

第一种是计数器循环,第二种是条件循环,第三种是迭代循环。
迭代循环可以循环字符串,数组,切片,map等。
忽略表达式,则为无限循环,for {}。

5.4 break和continue

break是退出当前循环体,contine是退出本次循环,进入下一次循环。
在嵌套循环体中,break会退出最内层的循环体。
continue只能用于for循环中。

5.5 标签与goto

来看一下标签的例子:

  1. package main
  2. import "fmt"
  3. func main() {
  4. LABEL1:
  5. for i := 0; i <= 5; i++ {
  6. for j := 0; j <= 5; j++ {
  7. if j == 4 {
  8. continue LABEL1
  9. }
  10. fmt.Printf("i is: %d, and j is: %d\n", i, j)
  11. }
  12. }
  13. }

image.png
当j ==4的时候,遇到LABEL1标签,标签是作用在外部循环的,所以此时把i循环进入下一个循环,j循环不执行了。如果把continue改成break,则直接退出外循环。
使用goto关键配合标签,可以实现循环的效果。

  1. package main
  2. import "fmt"
  3. func main() {
  4. i := 123
  5. LABEL1:
  6. if i == 100 {
  7. fmt.Println("123")
  8. return
  9. }
  10. i--
  11. goto LABEL1
  12. }