流程控制
Go语言的常用流程控制有 if 和 for,而 switch 和 goto 主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。
if else(分支语句)
if 语句是用来判断条件是否成立,然后执行相应的分支。if 语句可以有 else 或者 else if 子句,也可以嵌套使用。例如:
if x > 0 {
fmt.Println("x is positive")
} else if x < 0 {
fmt.Println("x is negative")
} else {
fmt.Println("x is zero")
}
当表达式1的结果为true时,就会执行分支1,反之则会判断表达式2,如果都不满足,则会执行分支3的代码。
go语言的if条件判断省略掉了表达式两边的括号,使得代码十分简洁。但是go语言中有个规定,那就是{必须与if/else if 表达式/else在同一行,否则会编译失败。
for(循环语句)
for 语句是用来重复执行一段代码,直到满足某个条件。for 语句可以有三种形式:带有初始值、条件和步长的经典形式;只有条件的简化形式;没有任何条件的无限循环形式。例如:
// 经典形式
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// 简化形式
sum := 1
for sum < 1000 {
sum += sum
}
// 无限循环形式
for {
fmt.Println("Hello, world!")
}
switch case(条件判断)
switch 语句是用来根据一个表达式的值,选择不同的分支执行。switch 语句可以有多个 case 子句,每个 case 子句可以有多个值或者表达式。switch 语句还可以使用 fallthrough 关键字来实现穿透效果,即执行完当前 case 后继续执行下一个 case。例如:
switch n := rand.Intn(100); n {
case 0:
fmt.Println("n is zero")
fallthrough
case 1, 2, 3:
fmt.Println("n is small")
default:
fmt.Println("n is big")
}
goto 语句是用来跳转到指定的标签处执行。goto 语句可以实现任意位置的跳转,但是不能跳出函数或者跳入其他函数。goto 语句一般不推荐使用,因为它会破坏程序的结构,导致代码难以理解和维护。例如:
func main() {
var a int = 10
LOOP:
for a < 20 {
if a == 15 {
a = a + 1
goto LOOP // 跳转到标签处
}
fmt.Printf("a 的值为 : %d\n", a)
a++
}
}
break和contiune
break和continue在go语言中的语法与其他语言几乎一致。break一般用于结束循环的使用,常用于一段代码中找到结果时直接进行break结束即可。continue一般用于结束当前循环使用,常用于当前结果不符合我们预期的结果时,我们可以使用continue来跳过当前循环,进行下一轮循环。
func break_continue() {
for i:=0;;i++ {
if i==3 {
fmt.Println(i)
break
}
}
//输出结果: //3
for i:=0;i<5;i++ {
if i%2==0 {
continue
}
fmt.Println(i)
}
//输出结果: //1 //3
}