for 语句
go 中的 for 语法与c/c++、java等语言非常相似,如下
for 简短声明语句;条件表达式;后置语句{
}
例子如下:
for i := 0 ; i < 10 ; i++{
//里面的语句会执行十次
}
其中i := 0为简短声明语句,i < 10为条件表达式,i++为后置语句。
for 中只有条件表达式必须要有,其他都可以不写,如下:
for ; true; {
break;
}
while循环
go 中没有 while 关键字, while 相关的功能被 for 代替了
n := 1
for n< 10 {
n++
}
go 中如果你希望创建一个无限循环,可以这样写:
for{
...
}
if
go 中的if 与其他语言非常相似
if 条件表达式{
} else{
}
go 中的 if 同样还支持简短声明语句,并像 for 一样使用它,如下:
if v := time.now().Unix(); v < dtl {
return v
} else {
fmt.Println("%#v", v)
}
不过,同样的,当 if-else 语句结束后,简短声明语句声明的变量也无法再使用
switch
在以往的语言中, switch 语句由于自身限制不经常使用, 而在 go 中, switch 则有了非常大的提升,使得它更像 if-else 语句的简便写法。
改动的两个主要方面是:每个 case 自动带有 break ,不需要再自己添加; case 判断的条件被扩展为一个条件表达式的返回值。具体如下:
switch i {
case 0:
case func():
}
这是普通的 switch 用法 就是当 i == 0 时执行第一个case,当 i == func() 时执行第二个语句。
而 switch 也同样可以不加条件,此时相当于 if-else ,如下:
var v = 1
switch {//这里没加
case v < 10 :
fmt.Println("1")
case v <= 17 :
fmt.Println("2")
default :
return
}
defer
defer 是一个新的概念,用来推迟某个函数的执行,如下:
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
这段代码的结果会是这样的:
hello
world
实际上这里 defer 的作用是将fmt.Println("world")推迟到 main 函数结束以后再运行。
那么如果我一次性 defer 了好几个函数,他们执行的先后顺序是什么样的。
func main() {
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
defer fmt.Println("4")
fmt.Println("hello")
}
输出结果:
hello
4
3
2
1
也就是先被 defer 的函数后执行,如果你学过数据结构与算法,你也能很容易知道 defer 的背后是一个栈。