美文网首页
Go基础学习之流程控制语句

Go基础学习之流程控制语句

作者: nextliving | 来源:发表于2018-04-22 13:05 被阅读13次

学习了一下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

参考

相关文章

网友评论

      本文标题:Go基础学习之流程控制语句

      本文链接:https://www.haomeiwen.com/subject/fuzqlftx.html