控制结构
if-else 结构:
// 形式一:
if condition{
do something
}
// 形式二:
if condition{
do something
} else {
do something
}
// 形式三:
if condition {
do something
}else if condition{
do something
}else{
do something
}
左大括号 { 必须与关键字在同一行。使用else-if结构,又大括号 } 必须与关键字同行。
if 中可以包含一个初始化语句:
if init; condition {
do something
}
a := 10
if a > 9 {
do something
}
上面代码可以改写为下面这样:
if a:= 10; a > 9 {
do something
}
在if中的初始化语句,只在该if中有效。
switch-case结构
// 形式一
switch var1 {
case var11:
...
case var22:
...
default:
...
}
// eg:
switch i {
case 0:
case 1:
f()
default:
}
var1可以是任意类型,var11与var22则是同类型的任意值。
继续执行分支代码,可以使用关键字fallthrough。
在switch中包含初始化语句
// 形式二
switch init {
case val1:
...
case val2:
...
default:
}
// eg:
switch a, b := 1, 0; {
case a < b: t = 1
case a = b: t = 0
case a > b: t = -1
default:
}
默认switch 为true
// 形式三
switch {
case condition:
...
case condition:
...
default:
...
}
switch {
case a > 0: t = 1
case a < 0: t = 0
default:
}
for循环结构
// 形式一
for 初始化语句; 条件语句; 修饰语句{
do something
}
// eg:
for i := 1; i < 10; i++ {
fmt.Printf("Now i is %d", i)
}
// 形式二 (与c语言中while循环类似)
for 条件语句 {
do something
}
// eg:
i := 0
for i < 10 {
fmt.Printf("Now i is %d", i)
i++
}
for-range循环结构
for-range可以迭代任何一个集合(数组、map),他能获得每次迭代的值和索引。
// for range 形式
for idx, val := range coll {
do something
}
// eg:
var arr [3]int
for idx, val := range arr {
fmt.Printf("idx:%d val:%d", idx, val)
}
注:for-range中val是值对于索引(idx)的值拷贝。但若val是一个指针,那么会产生指针拷贝,依旧可以修改原集合中的值