Golang - 条件和循环

路漫漫其修远兮,吾将上下而求索。

条件

和 java 一样,Go 也支持条件语句中存在多个分支,同样的也支持 if 和 switch。

if 示例:

1
2
3
4
5
6
7
8
var index = 5
if index >= 0 && index < 5 {
    fmt.Println("if 代码块") 
} else if index >= 5 && index < 10 {
    fmt.Println("else if 代码块") 
} else {
    fmt.Println("else 代码块") 
}

switch 示例一:

1
2
3
4
5
6
7
8
9
10
11
12
13
var grade = "A"
switch {
  case grade == "A" :
     fmt.Printf("优秀!\n" )    
  case grade == "B", grade == "C" :
     fmt.Printf("良好\n" )      
  case grade == "D" :
     fmt.Printf("及格\n" )      
  case grade == "F":
     fmt.Printf("不及格\n" )
  default:
     fmt.Printf("差\n" );
}

switch 示例二:

1
2
3
4
5
6
7
8
9
10
11
12
13
var grade = "A"
switch grade{
  case "A" :
     fmt.Printf("优秀!\n" )    
  case "B", "C" :
     fmt.Printf("良好\n" )      
  case "D" :
     fmt.Printf("及格\n" )      
  case "F":
     fmt.Printf("不及格\n" )
  default:
     fmt.Printf("差\n" );
}

以上两种写法都是可以的,case 后面可以是条件表达式也可以是匹配的变量。但是他们不能被混在一起使用,如下就是一个错误的示范:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var grade = "A"
var name = "Martin"
switch grade{
  case "A" :
     fmt.Printf("优秀!\n" )    
  case "B", "C" :
     fmt.Printf("良好\n" )      
  case "D" ,name == "Martin":
     fmt.Printf("及格\n" )      
  case "F":
     fmt.Printf("不及格\n" )
  default:
     fmt.Printf("差\n" );
}

如果想用多个变量进行匹配可以使用 switch 示例一的写法,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var grade = "A"
var name = "Martin"
switch {
case grade == "A" && name == "Martin":
    fmt.Printf("Martin 优秀!\n")
case grade == "B", grade == "C":
    fmt.Printf("良好\n")
case grade == "D":
    fmt.Printf("及格\n")
case grade == "F":
    fmt.Printf("不及格\n")
default:
    fmt.Printf("差\n")
}

和 java 不同的是 Go 在运行 switch 时 只要进入一个 case 代码块后程序会默认跳出整个 switch。如果不想跳出 switch 继续匹配下面的选项并执行需要在 case 代码块中加入 fallthrough,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var grade = "A"
var name = "Martin"
switch {
case grade == "A" && name == "Martin":
    fmt.Printf("Martin 优秀!\n")
    fallthrough
case grade == "B", grade == "C":
    fmt.Printf("良好\n")
    fallthrough
case name == "Martin":
    fmt.Printf("及格\n")
    fallthrough
case grade == "F":
    fmt.Printf("不及格\n")
    fallthrough
default:
    fmt.Printf("差\n")
}

循环

Go 语言提供了下面几种类型的循环:

循环类型 描述
for 循环 重复执行语句块
循环嵌套 在循环中嵌套一个或多个循环

循环控制语句:

控制语句 描述
break 语句 经常用于中断当前 for 循环或跳出 switch 语句
continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环
goto 语句 将控制转移到被标记的语句

示例:

1
2
3
for i := 0; i < 10; i++ {
    fmt.Println(i)
}