5.1 if-else结构
if else语句和其他语言大同小于。
if语句可以有表达式:
package mainimport "fmt"func main() {i := 123if k := i - 1; k > 100 {fmt.Println("k: ", k)}}
在if花括号内定义的变量,和if语句之外的是不相同的,外部的会暂时被隐藏。
package mainimport "fmt"func main() {i := 123if k := i - 100; k > 100 {var k = 99fmt.Println("k: ", k) //99} else {fmt.Println("k: ", k) //23}}
5.2 switch结构
switch var1 {
case val1:
…
case val2:
…
default:
…
}
var1可以是任意类型,但是val1,val2,。。。则必须是同类型的。
顺序执行,执行case匹配上。不需要break来结束。
在case内,可以使用fallthrough语句来让匹配上了该case,也不退出,继续执行下面的语句。
case 1 : fallthrough
default语句相当于if else的else,是匹配不上才执行的。
5.3 for结构
for是循环结构。
for结构一般使用三种场景:
- for i :=1;i < 5;i++{}- for i > 10{}- for i := rang var{}
第一种是计数器循环,第二种是条件循环,第三种是迭代循环。
迭代循环可以循环字符串,数组,切片,map等。
忽略表达式,则为无限循环,for {}。
5.4 break和continue
break是退出当前循环体,contine是退出本次循环,进入下一次循环。
在嵌套循环体中,break会退出最内层的循环体。
continue只能用于for循环中。
5.5 标签与goto
来看一下标签的例子:
package mainimport "fmt"func main() {LABEL1:for i := 0; i <= 5; i++ {for j := 0; j <= 5; j++ {if j == 4 {continue LABEL1}fmt.Printf("i is: %d, and j is: %d\n", i, j)}}}

当j ==4的时候,遇到LABEL1标签,标签是作用在外部循环的,所以此时把i循环进入下一个循环,j循环不执行了。如果把continue改成break,则直接退出外循环。
使用goto关键配合标签,可以实现循环的效果。
package mainimport "fmt"func main() {i := 123LABEL1:if i == 100 {fmt.Println("123")return}i--goto LABEL1}
