1.if-else
用于测试条件是否成立,成立则执行if括起来的代码:
if condition {
//do something
}
如果需要在条件不满足时执行,则只需要加上else即可:
if condition {
//do something
} else {
//do simething
}
如果存在多个条件,可以使用else-if增加新的判断:
if condition1 {
//do something
} else if condition2 {
//do something
} else {
//do something
}
else-if的数量是没有限制的,但是为了代码的可读性,尽量少用else-if。
2.switch
go的switch使用非常灵活,接受任意形式的表达式:
switch var1 {
case val1:
//do something
case val2:
//do something
default:
//do something
}
var1可以是任何类型,而val和val2可以是同类型的任意值。你可以同时在一个分支中使用多个值:
case val1, val2, val3:
go中的switch不需要break来结束分支。如果需要在执行了一个case分支后继续往后执行,只需要使用fallthrough关键字即可:
switch i {
case 0: fallthrough
case 1:
f()
}
当case后的语句只有一行时,可以直接将语句放在case后面。case后的执行语句也不需要花括号。case同样支持逻辑判断:
switch i {
case i > 0:
//do something
case i < -10:
//do something
default:
//do something
}
同样的,可以使用return来提前结束代码块的执行。
3.for
想要执行某些语句,go中可以使用for来执行。for的基本形式为:
for 初始化语句; 条件语句; 修饰语句 {
}
例子:
for i := 0; i < 3; i++ {
fmt.Println("for index = ", i)
}
输出:
for index = 0
for index = 1
for index = 2
因为go具有平行复制的特性,所以也可以在for中使用多个计数器:
for i, j := 0, 10; i < j; i++, j = i + 1 {
}
也可以将两个for循环嵌套使用:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
fmt.Println(j)
}
}
还可以循环一个Unicode字符串:
str := "He To"
for i := 0; i < len(str); i++ {
fmt.Printf("for index = %d, is = %s", i, str[i])
}
输出:
for index = 0, is = H
for index = 1, is = e
for index = 2, is =
for index = 3, is = T
for index = 4, is = o
for也支持纯条件语句,可以将这个认为是没有初始化语句和修饰语句的for循环:
i := 5
for i >= 0 {
i--;
fmt.Println(i)
}
输出:
5
4
3
2
1
0
-1
for还有另外一个表达方式for-range,这是go特有的一种方式,在很多场景下都很实用,它可以迭代任何一个集合,一般形式为:
for i, val := range coll {}
val对应的是集合中对应索引的值拷贝,刚才的Unicode字符串就可以直接使用range来循环:
str := "He To"
for i, val := range str {
fmt.Printf("for index = %d, is = %s", i, val)
}
4.Break和continue
break用于条件,循环语句中的退出操作,break做的作用结果是跳过整个代码块,执行后续的操作。
例子:
for i := 0; i < 3; i++ {
for j := 0; j < 5; j++ {
if j > 3 {
break
}
fmt.Println(j)
}
fmt.Println()
}
输出:
0123 0123 0123
关键字continue用于忽略循环体中剩余分代码块直接进入下一次循环,但不是无条件的执行下一次循环,执行之前依旧需要满足条件判断:
for i := 0; i < 5; i++ {
if i == 3 {
continue
}
fmt.Println(i)
}
//输出
0 1 2
continue只能用于for循环中。
5.标签Label与goto
for,switch都可以配合Label使用,即第一行第一个冒号:结尾的单词:
LABEL1:
for i := 0; i < 5; i++ {
if i == 3 {
continue LABEL1
}
fmt.Println(i)
}
// 输出
0 1 2 4 // 3被跳过了
但注意标签和 goto 语句之间不能出现定义新变量的语句,否则会导致编译失败。
另外,可以使用goto语句和标签配合使用来模拟循环
i:=0
HERE:
print(i)
i++
if i==5 {
return
}
goto HERE
但是这种方式是不推荐使用,如果一定要使用,将标签放在goto的后面,但注意标签和goto语句之间不能出现定义新变量的语句,否则会导致编译失败。
微信搜索「goentry-xyz」,关注公众号「灯下独码」
网友评论