一 选择结构
1.1 if语句
Go 编程语言中 if
语句的语法如下:
1 2 3
| if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ }
|
If
在布尔表达式为 true
时,其后紧跟的语句块执行,如果为 false
则不执行。
1.1.1 if 基本使用
1 2 3 4 5 6 7 8 9 10 11
| package main
import "fmt"
func main() { var a int = 3 //条件表达式没有括号 if a == 3 { fmt.Println("a==3") } }
|
1.1.1 if 初始化表达式
支持一个初始化表达式, 初始化字句和条件表达式直接需要用分号分隔
Go 的 if
还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了,如下所示:
1 2 3 4 5 6 7 8 9 10 11
| package main
import "fmt"
func main() {
if b := 3; b == 3 { fmt.Println("b==3") }
}
|
1.1.3 if … else
1 2 3 4 5 6 7 8 9 10 11 12
| package main
import "fmt"
func main() { if a := 3; a == 4 { fmt.Println("a==4") } else { //左大括号必须和条件语句或else在同一行 fmt.Println("a!=4") } }
|
1.1.4 if … else if … else
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import "fmt"
func main() { if a := 3; a > 3 {
fmt.Println("a>3")
} else if a < 3 {
fmt.Println("a<3")
} else if a == 3 {
fmt.Println("a==3")
} else {
fmt.Println("error")
} }
|
1.2 switch语句
1.2.1 基本使用
Go里面switch
默认相当于每个case
最后带有break
,匹配成功后不会自动向下执行其他case
,而是跳出整个switch
, 但是可以使用fallthrough
强制执行后面的case
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package main
import "fmt"
func main() { var score int = 90
switch score {
case 90:
fmt.Println("优秀")
//fallthrough
case 80:
fmt.Println("良好")
//fallthrough
case 50, 60, 70:
fmt.Println("一般")
//fallthrough
default:
fmt.Println("差")
} }
|
1.2.2 进阶使用
可以使用任何类型或表达式作为条件语句:
示例1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import "fmt"
func main() {
switch s1 := 90; s1 { //初始化语句;条件
case 90:
fmt.Println("优秀")
case 80:
fmt.Println("良好")
default:
fmt.Println("一般")
} }
|
示例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package main
import "fmt"
func main() { var s2 int = 90
switch { //这里没有写条件
case s2 >= 90: //这里写判断语句
fmt.Println("优秀")
case s2 >= 80:
fmt.Println("良好")
default:
fmt.Println("一般")
}
}
|
示例3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package main
import "fmt"
func main() { switch s3 := 90; { //只有初始化语句,没有条件
case s3 >= 90: //这里写判断语句
fmt.Println("优秀")
case s3 >= 80:
fmt.Println("良好")
default:
fmt.Println("一般")
} }
|
二 循环语句
2.1 for
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import "fmt"
func main() {
var i, sum int
for i = 1; i <= 10; i++ {
sum += i
}
fmt.Println("sum = ", sum) }
|
2.2 range
关键字 range
会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package main
import "fmt"
func main() {
s := "abc"
for i := range s { //支持 string/array/slice/map。
fmt.Printf("%c\n", s[i])
}
for _, c := range s { // 忽略 index
fmt.Printf("%c\n", c)
}
for i, c := range s {
fmt.Printf("%d, %c\n", i, c)
} }
|
三 跳转语句
3.1 break和continue
在循环里面有两个关键操作break
和continue
,break
操作是跳出当前循环,continue
是跳过本次循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if 2 == i {
//break //break操作是跳出当前循环
continue //continue是跳过本次循环
}
fmt.Println(i)
}
}
|
注意:break
可⽤于for
、switch
、select
,⽽continue
仅能⽤于for
循环。
3.2 goto
用goto
跳转到必须在当前函数内定义的标签:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
for {
fmt.Println(i)
goto LABEL //跳转到标签LABEL,从标签处,执行代码
}
}
fmt.Println("this is test")
LABEL:
fmt.Println("it is over")
}
|