if:
使用的语法如:
if x > 10 {
fmt.Println("x大于10")
} else {
fmt.Println("x小于10")
}
条件判断语句中不需要括号。与其他语言不同的就是条件判断语句里允许声明一个变量,这个变量的作用域在该条件逻辑块内有效,其他地方不起作用,如:
if x := randVal(); x > 10 {
fmt.Println("x大于10")
} else {
fmt.Println("x小于10")
}
switch:
语法:switch 表达式 {
case 表达式1:
程序操作语句
case 表达式2:
程序操作语句
}
go中的switch非常的强大,case的值不必是标量,而可以是一个表达式的执行结果,只要表达式的结果类型和条件的类型一样就可以了,可以把多个值集合在一个case里面,只要条件表达式的值符号此case中的其中一个值就可以执行case里面的语句,同时case默认带有break,匹配成功就不会执行下面的判断语句了,如果要继续判断接下来的case,可以在case里面增加fallthrough来强制执行后面的case代码。如果switch没有表达式,它会匹配true。如;
i := 10
switch i {
case 2-1:
fmt.Println("i的值为2-1")
case 2,3,4,5:
fmt.Println("i的值在2到5之间")
fallthrough
case 10:
fmt.Println("i的值等于10")
default:
fmt.Printf("i的值为:%d\n", i);
}
for:
更其他语言一样用来循环读取数据,但他更强大,go中没有while,do while等语句,都是通过for语句来实现的。
使用:for 表达式1; 表达式2; 表达式3 {
执行的程序语句
}
for 判断语句同样没有括号括起来,和其他语言一样表达式1在循环开始之前调用,表达式3在每轮循环结束之时调用,表单式2用来进行每次循环的判断。在go中表达式1和表达式3可以省略,来当while功能如:
sum := 1
for sum < 100 {
sum += sum
}
for range这个语句相当的好用类似于foreach或for in语句。用for range可以来读取字符串,数组,slice,map,channel的数据,如:
for k, v := range map{
fmt.Println("map's key:", k)
fmt.Println("map's value:", v)
}
如果不需要相关的值,可以使用"_",来丢弃相关的返回值。如:
for _, v := range arr {
.....
}
注意:迭代右表达式在循环开始前,一次性的计算好,迭代的变量遵循变量类型的赋值原则,如果是指针指向类型,则在迭代的过程中,如果有修改相关值,会影响到相关的迭代过程,如果是值拷贝的,在迭代过程中对原变量进行更改,不会影响对循环前变量值的迭代过程。
break|continue|goto:
和其他语言一样通过break来跳出循环,continue来跳过本次循环,break和continue还可以跟着标号,来跳到多重循环中的外出循环。break也可以配合标签来使用,以跳出到指定的标签位置。goto也和标签配合使用来使程序跳转到指定的标签位置,标签从新的一行开始,并且与冒号结束,标签名大小写敏感。