-
流程控制-选择语句
- 1条件语句if
if 布尔表达式{//布尔表达式不需要括号
/*在布尔表达式为true时执行*/
}
- 2 if...else 语句
if 布尔表达式{
/*在布尔表达式为true时执行*/
} else {
/*在布尔表达式为false时执行*/
}
- 3if...else if...else语句
if 布尔表达式1 {
/*在布尔表达式1 为true时执行*/
} else if 布尔表达式2{
/*在布尔表达式2 为true时执行*/
} else {
/*在布尔表达式1、2 均为false时执行*/
}
- 4 if 嵌套
if 布尔表达式1{
/*在布尔表达式1 为true时执行*/
if 布尔表达式2{
/*在布尔表达式2 为true时执行*/
}
}
Demo
package main
import "fmt"
func main() {
var a int = 10
/*if语句*/
if a > 5 {
fmt.Println("a大于5")
}
/*if...else语句*/
if a > 10 {
fmt.Println("a大于10")
} else {
fmt.Println("a小于等于10")
}
/*if...else if...else语句*/
if a > 10 {
fmt.Println("a大于10")
} else if a == 10 {
fmt.Println("a等于10")
} else {
fmt.Println("a小于10")
}
/*if嵌套语句*/
if a > 5 {
if a == 10 {
fmt.Printf("a=%d\n", a)
}
}
}
- 5 switch
形式 1
/*case语句存在一个和s相等的条件,执行对应的case语句*/
switch s {
case s1:
...
case s2,s3:
...
default:
...
}
形式2
/*如果switch之后无表达式,则默认为true,case后面的条件第一个满足true的,执行该case语句*/
switch {
case s1:
...
case s2:
...
default:
...
}
形式3
switch {
case s1:
...
/*fallthrouth语句应该位于case语句的最后一句,
则强制执行下一个case语句或者default语句*/
fallthrough
case s2:
...
default:
...
}
- switch语句从上至下执行,直到找到匹配项
- switch每一个case默认都有break功能,匹配之后的case条件不在受关注。这点和其他语言不一样。
- case之后的条件可能右多个满足条件,使用逗号隔开,如:case s1,s2
- 如果所以的case条件都不满足,执行default语句
- 如果switch之后无表达式,则默认为true
- 当一个case语句之后带有fallthrough,则强制执行下一个case语句,不论下一个case条件是否满足;若fallthrough位于最后一个case语句中,则强制执行default语句。另外,fallthrough语句应该是case子句中的最后一个,如果它出现在case语句中间则会报错。
Demo
package main
import "fmt"
func main() {
var grade string
var marks int = 70
/*根据分数判断A,B,C,D;switch之后默认为true,所有case条件中
第一个满足true的执行相应case中语句*/
switch {
case marks >=90:
grade = "A"
case marks >=80:
grade = "B"
/*满足其中一个条件*/
case marks >=60 :
grade = "C"
default:
grade = "D"
}
/*根据A B C D判断学生等级;switch之后默认为true,所有case之后的条件结果为布尔型*/
switch {
/*满足其中一个条件,即得"优良"*/
case grade == "A",grade == "B":
fmt.Printf("优良!\n" )
case grade == "C":
fmt.Printf("及格\n" )
fallthrough //强制执行default语句
default:
fmt.Printf("不及格\n" )
}
fmt.Printf("你的等级是:%s\n", grade )
}
- 6 四种for循环
//形式1
for init; condition; post {
/*循环体*/
}
//形式2
for init; condition; { //分号不能省略
/*循环体*/
post
}
//形式3
for condition { //只有关系表达式或逻辑表达式
/*循环体*/
}
//形式4
for { /*无限循环:for之后没有任何表达式,此时默认为true,陷入死循环
/*循环体*/
}
Demo
package main
import "fmt"
func main() {
var sum1, sum2, sum3 int
/*循环形式1*/
for i := 1; i <= 10; i++ {
sum1 += i
}
fmt.Println("sum1 = ", sum1)
/*循环形式2*/
for i := 1; i <= 10; { //";不能省"
sum2 += i
i++
}
fmt.Println("sum2 = ", sum2)
/*循环形式3*/
var i int
for i <= 10 {
sum3 += i
i++
}
fmt.Println("sum3 = ", sum3)
}
- 7 跳转语句
关键字 | 描述 | 格式 |
goto | 无条件的跳转到本函数的某个标签,执行标签下的语句。 |
goto label ... label: statement |
break | 跳出循环体,并执行循环之后的语句。 | break |
continue | 跳过当前循环,并执行下一次循环。 | continue |
Demo
package main
import "fmt"
func main() {
/*goto:无条件的跳转值跟函数的某个标签,执行标签下面的语句*/
var i, sum1 int
for {
i++
if i > 5 {
goto label
}
sum1 += i
}
label:
fmt.Printf("i = %d, sum1 = %d\n", i, sum1)
/*break:跳出循环,并执行循环之后的语句*/
var j, sum2 int
for j = 1; j <= 10; j++ {
if j > 5 {
break
}
sum2 += j
}
fmt.Printf("j = %d, sum2 = %d\n", j, sum2)
/*continue:跳过当前循环,并执行下一次循环*/
var k, sum3 int
for k = 1; k <= 10; k++ {
if k == 5 {
continue
}
sum3 += k
}
fmt.Printf("k = %d, sum3 = %d\n", k, sum3)
}