学习了一下Go的流程控制语句,在此记录一下学习总结。
for
Go中只有一种循环体for,没有while,其它编程语言中的while循环在Go中是用for实现的:
package main
import "fmt"
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}
以上的for循环只包括了condition expression,一个完整的for循环包括了3部分:
the init statement: executed before the first iteration
the condition expression: evaluated before every iteration
the post statement: executed at the end of every iteration
对应的代码结构为:
for init statement; condition expression; post statement {
//code
}
注意,for循环声明部分没有括号(parentheses)。来看一段真实的代码:
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
事实上,for循环中的init和post statement部分是可以省略的:
package main
import "fmt"
func main() {
sum := 1
for ; sum < 1000; {
sum += sum
}
fmt.Println(sum)
}
以上代码也相当于是一个while循环了,即只有condition expression时,for循环相当于其它编程语言中的while循环。那么如何实现无线循环呢?答案是:
package main
func main() {
for {
}
}
没错,省略for循环声明的3个部分时,就是一个无限循环。
if
if的格式为:
if init statement; condition expression {
//code
}
其中init statement可以省略。
if x :=0; x < 2 {
fmt.Println(x)
}
以上代码也可以写成:
if x < 2 {
fmt.Println(x)
}
switch
switch和if的结构很像:
switch init statement; condition expression {
case a:
//code
case b:
//code
......
}
其中init statement可以省略.如果把condition expression也省略,就相当于是一个if-else-then多重条件语句,等价于switch true:
switch {
case a:
//code
case b:
//code
......
}
defer
defer用于函数,会推迟一个函数的执行。使用defer的函数会先被压入栈中,等待周围函数执行完成以后,再从栈中按照后进先出的顺序取出执行。
用一段代码举例:
package main
import "fmt"
func main() {
fmt.Println("begin")
for i := 0; i < 5; i++ {
defer fmt.Println(i)
}
fmt.Println("over")
}
以上代码输出
begin
over
4
3
2
1
0
网友评论