if else 结构:
#第一种 if condition { // do something } #第二种 if condition { // do something } else { // do something } #第三种 if condition1 { // do something } else if condition2 { // do something else }else { // catch-all or default }
#注意大括号的位置,都是固定的
if在condition 中还可以加上赋值语句
if val := 10; val > max {
// do something
}
switch 结构
#第一种 switch var1 { case val1: ... case val2: ... default: ... } #第二种 switch { case i < 0: f1() case i == 0: f2() case i > 0: f3() } #第三种 switch result := calculate(); { case result < 0: ... case result > 0: ... default: // 0 }
for 循环
#第一种 for i:=0; i<5; i++ { for j:=0; j<10; j++ { println(j) } } #第二种 for a < b { a++ fmt.Printf("a 的值为: %d ", a) } # 类似其他语言for和while
无限循环
for true {} 或者for {} 这种内部需要有条件判断来退出循环
for range 结构
这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合(包括数组和 map,详见第 7 和 8 章)。语法上很类似其它语言中 foreach 语句,但您依旧可以获得每次迭代所对应的索引。一般形式为: for ix, val := range coll { } 。要注意的是, val 始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值(译者注:如果 val 为指针,则会产生指针的拷贝,依旧可以修改集合中的原值)
func main() { s :="hello world" for in,va := range s{ fmt.Print(in,va," ") } } #va 索引值的拷贝 0 104 1 101 2 108 3 108 4 111 5 32 6 119 7 111 8 114 9 108 10 100
关键字fallthrough
在switch语句中,如果一个case语句后面加了fallthrough那么会直接执行下一个case里面的内容
func main() { switch Num:=1;{ case 0 <= Num && Num <= 3: fmt.Printf("0-3") fallthrough case 4 <= Num && Num <= 6: fmt.Printf("4-6") case 7 <= Num && Num <= 9: fmt.Printf("7-9") } } 0-34-6