Golang基础(二) | 流程控制
if
if也许是各种编程语言中最常见的了,它的语法概括起来就是:假如满足条件就做某事,否则做另一件事。
Go里面if条件判断语句中不需要括号,如下代码所示
if x > 10 { fmt.Println("x is greater than 10")} else { fmt.Println("x is less than 10")}Go的if还有一个强大的地方就是条件判断语句里面允许公告一个变量,这个变量的作用域只能在该条件逻辑块内,其余地方就不起作用了,如下所示
// 计算获取值x,而后根据x返回的大小,判断能否大于10。if x := computedValue(); x > 10 { fmt.Println("x is greater than 10")} else { fmt.Println("x is less than 10")}//这个地方假如这样调用就编译出错了,由于x是条件里面的变量fmt.Println(x)若有多个IF条件,可以参照下面的写法
if integer == 3 { fmt.Println("The integer is equal to 3")} else if integer < 3 { fmt.Println("The integer is less than 3")} else { fmt.Println("The integer is greater than 3")}for
Go里面最强大的一个控制逻辑就是for,它就可以用来循环读取数据,又可以当作while来控制逻辑,还能迭代操作。它的语法如下:
for expression1; expression2; expression3 { //...}或者者函数调用返回值之类的,expression2是用来条件判断,expression1在循环开始之前调用,expression3在每轮循环结束之时调用。
具体用法,可以参照下面的例子:
package mainimport "fmt"func main(){ sum := 0; for index:=0; index < 10 ; index++ { sum += index } fmt.Println("sum is equal to ", sum)}// 输出:sum is equal to 45有些时候假如我们忽略expression1和expression3:
sum := 1for sum < 1000 { sum += sum}在循环里面有两个关键操作break和continue ,break操作是跳出当前循环,continue是跳过本次循环。当嵌套过深的时候,break可以配合标签使用,即跳转至标签所指定的位置,详细参考如下例子:
for index := 10; index>0; index-- { if index == 5{ break // 或者者continue } fmt.Println(index)}// break打印出来10、9、8、7、6// continue打印出来10、9、8、7、6、4、3、2、1break和continue还可以跟着标号,用来跳到多重循环中的外层循环
for配合range可以用于读取slice和map的数据:
for k,v:=range map { fmt.Println("map's key:",k) fmt.Println("map's val:",v)}因为 Go 支持 “多值返回”, 而对于“公告而未被调用”的变量, 编译器会报错, 在这种情况下, 可以使用_来丢弃不需要的返回值 例如
for _, v := range map{ fmt.Println("map's val:", v)}switch
有些时候你需要写很多的if-else来实现少量逻辑解决,这个时候代码看上去就很丑很冗长,而且也不易于以后的维护,这个时候switch就能很好的处理这个问题。它的语法如下
switch sExpr {case expr1: some instructionscase expr2: some other instructionscase expr3: some other instructionsdefault: other code}sExpr和expr1、expr2、expr3的类型必需一致。Go的switch非常灵活,表达式不必是常量或者整数,执行的过程从上至下,直到找到匹配项。
i := 10switch i {case 1: fmt.Println("i is equal to 1")case 2, 3, 4: fmt.Println("i is equal to 2, 3 or 4")case 10: fmt.Println("i is equal to 10")default: fmt.Println("All I know is that i is an integer")}在第5行中,我们把很多值聚合在了一个case里面,同时,Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其余case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。
integer := 6switch integer {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")}goto
Go有goto语句(不建议使用)。用goto跳转到必需在当前函数内定义的标签。例如假设这样一个循环:
func myFunc() { i := 0Here: //这行的第一个词,以冒号结束作为标签 println(i) i++ goto Here //跳转到Here去}1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Golang基础(二) | 流程控制