Go 指南学习笔记二

1.for循环

go语言只有一个循环语句,即for.

1
2
3
4
sum := 0
for i:= 0;i<10;i++{
sum += i
}
  • 不像java,python等,条件表达式不需要()小括号,循环体需要{}
  • 初始化条件和后置判断条件不是必须的,如for ; i<10; {}
  • 在java等语言中while循环在go语言中写法
1
2
3
for i < 10 {
sum += i
}
  • 死循环
1
2
3
for {
sum += i
}

2.if语句

  • 同for循环一样,if语句的判断条件语句也不需要()
1
2
if i<10 {
}
  • 同for循环一样,条件之前也可以是一个简单的语句
1
2
3
4
5
6
7
i := 10
if j := 10; i<j {
return j
} else {
return i
}

3.switch语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Print("Go runs on ")
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
fmt.Printf("%s.", os)
}
}
  • 按照条件从上到下执行,直到匹配到成功为止,执行成功后,后边的条件不再执行
  • 没有条件的switch,如switch {},同switch true {}一样

4.defer语句

  • defer 语句会延迟函数的执行直到上层函数返回。

    延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用

1
2
3
4
5
6
7
8
package main
import "fmt";
func main(){
defer fmt.Println("world&quot;)
fmt.Print("hello")
}
  • defer栈,延迟的函数调用会被压入一个栈中。
1
2
3
4
5
6
7
8
9
10
11
package main
import "fmt"
func main() {
fmt.Println("counting")
for i := 0; i < 10; i++ {
defer fmt.Println(i)
}
fmt.Println("done")
}

输出结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Running] go run "/Users/badwolf/Documents/go/hello/defer.go"
counting
done
9
8
7
6
5
4
3
2
1
0
如果您觉得对您有帮助,谢谢您的赞赏!