一、循环结构
注意:go只有一个循环结构,即for
- 语法要点:
- for后面的条件可以不加括号,甚至连条件都可以不加
- 也支持
break
,continue
,goto
三种循环控制语句
- 语法应用:
- 无限循环:
for { }
- 相当于普通while循环
for i < 10 { }
- 相当于普通的for循环
for i := 0 ; i < 10 ; i++ { }
这里的i的作用区域只限于循环内部哦~php大佬们请注意
二、条件语句(if)
- 语法要点:
- if后面的条件可以不加括号,if后面的条件支持附加一个
:=
变量赋值语句,这样的好处是该变量只会出现在该if语句范围内
- if后面的条件可以不加括号,if后面的条件支持附加一个
- 示例:
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
三、条件语句(switch-case)
- 语法要点 :
- switch后面的变量可以不加括号,且也支持附加一个
:=
变量赋值语句 - case后面的参照值可以是一个变量,甚至是表达式,甚至是函数
- 可以不用添加break了,hit到指定的case将会直接结束,就算下方有一句
case f():
,f()也不会被执行 - switch后面可以不用加任何东西,等同于
switch true
- switch后面的变量可以不加括号,且也支持附加一个
- 例子:
//eg1
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("Good morning!")
case t.Hour() < 17:
fmt.Println("Good afternoon.")
default:
fmt.Println("Good evening.")
}
//eg2
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.\n", os)
}
四、Defer延迟执行结构
- 语法结构:
defer <function>
- 语法作用:以defer 声明的函数调用,将会被延迟执行,直到该语句下方的所有defer和非defer语句执行完毕
- 例子:
package main
import "fmt"
func main() {
defer fmt.Println("world")
defer fmt.Println("world2")
fmt.Println("hello")
}
/*output:
hello
world2
world*/
- 语法作用:可用于后进先出的结构(在循环结构中使用,可以达到反向输出的效果)
网友评论