1 条件判断if和switch
所有的编程语言都有这个if,表示如果满足条件就做某事,不满足就做另一件事,go中的if判断和其它语言的区别主要有以下两点
1. go里面if条件判断不需要括号
2. go的条件判断语句中允许声明一个变量,这个变量的作用只在该条件逻辑块中
例子如下:
package mainimport "fmt"func main() {x := 5// 条件变量在外部声明if x >= 5 {fmt.Println("x >= 5")} else {fmt.Println("x < 5")}// 条件变量在条件语句内部声明if y := 3; y > 5 {fmt.Println("y > 5")} else {fmt.Println("y <= 5")}
}
结果如下:
当同时有多个if判断时,使用switch会使得我们的代码更简洁和灵活
例子如下:
package mainimport "fmt"func main() {i := 6switch i {case 4:fmt.Println("The integer was <= 4")fallthroughcase 5:fmt.Println("The integer was <= 5")fallthroughcase 6:fmt.Println("The integer was <= 6")fallthroughcase 7:fmt.Println("The integer was <= 7")fallthroughcase 8:fmt.Println("The integer was <= 8")fallthroughdefault:fmt.Println("default case")}
}
switch中默认每个case都带了一个break, 如果匹配成功不会继续往下执行,如果需要继续往下执行,则使用fallthrough强制执行后面的代码,因此,上面代码的运行结果是:
2. 无条件跳转goto
goto适用方法和c/c++类似,我们需要在函数中定义一个标签label,然后使用goto label即可无条件跳转到该位置,例子如下:
package mainimport "fmt"func main() {x := 5fmt.Println("x = ", x)goto Herefmt.Println("test")
Here:fmt.Println("goto here")
}
结果:
1.3 循环控制for
for和其它语言C、C++类似,只是格式不用括号包括,用法如下
for expression1; expression2; expression3 {
//...
}
expression1, expression2和expression3都是表达式,其中expression1和expression3是变量声明和函数调用返回值之类的,expression2用来条件判断,expression1在循环开始前调用,expression3在每轮循环结束时调用
例子:计算1-9整数之和
package mainimport "fmt"func main() {sum := 0for i := 0; i < 10; i++ {sum += i}fmt.Println("sum is equal to ", sum)
}// 输出:sum is equal to 45
go里面是没有while这个关键字的,想要达到和while一样的效果也可以通过for实现,在for循环中expression1和expression3都省略掉就可以达到while的效果了。例子:
package mainimport "fmt"func main() {sum := 1for sum < 10 {sum += sum}fmt.Println("sum is equal to ", sum)
}// 输出:sum is equal to 16
在循环中有两个关键操作continue和break,continue表示跳过本次循环,break表示跳出当前循环,这一点和C、C++一致。举个简单的例子
package mainimport "fmt"func main() {for i := 10; i > 0; i-- {if i == 5 {break // 或者continue}fmt.Println(i)}// break打印出来10、9、8、7、6// continue打印出来10、9、8、7、6、4、3、2、1
}
除此之外,还有一个常见的用法就是for和range配合来便利slice和map的数据,例子如下:
package mainimport "fmt"func main() {stus := map[string]string{"name": "test","age": "18","score": "78",}for key, val := range stus {fmt.Printf("key = %s, val = %s\n", key, val)}
}
输出结果为: