今天说一下go语言的循环条件
(一)重点放在前面说
- Go语言没有while循环条件,只有for循环,但是for循环可以充当while循环
(二)Go语言for循环语法
①一般for循环
语法: for 赋值语句;循环条件;循环变量{}
打印99乘法表(与c语言,c++一样) mystr := "%d*%d=%d\t" for i := 1; i < 10; i++ { for j := 1; j <= i; j++ { tempstr := fmt.Sprintf(mystr, j, i, j*i)//这一句时将数据格式化写入mystr内 fmt.Print(tempstr)//打印格式化好的字符串 } fmt.Println() }
②可以充当while循环的for循环
语法: for 循环条件{}
打印99乘法表(与while循环没两样) mystr := "%d*%d=%d\t" j, i := 1, 1 for i < 10 { j = 1 for j <= i { tempstr := fmt.Sprintf(mystr, j, i, j*i)//这一句时将数据格式化写入mystr内 fmt.Print(tempstr)//打印格式化好的字符串 j++ } fmt.Println() i++ }
③对可迭代对象进行循环遍历
语法: for key,value :=range 可迭代对象{} 该方法在以后最为常用,其中key,value可以使用 _ 空白字符进行忽略,只得到键或值
打印99乘法表 //以下一句是数组直接初始化的方法,在以后还会提到 myarray := [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9} for _, v := range myarray { l := 1 for l <= v { fmt.Printf("%d*%d=%d\t", l, v, l*v) l++ } fmt.Println() }
(三)终止、改变循环的条件
重点:语言可以在循环外面设置标签,可以跳出标签下的循环。(下面详细介绍)
①break
默认跳出一层循环 直接在指定位置进行break 加上标签的话跳出标签下的循环
打印1-100的笛卡尔积: //抛出锚点(标签) Here: for i := 0; i < 100; i++ { for j := 0; j < 100; j++ { fmt.Println(i, "与", j,"乘积为",i*j) if j == 10 { break Here } } } ------------------------------------------------------------------------------------- 因为有循环条件 一般的break条件下应该是打印1000个数据 但是对标签进行跳出,就直接跳出了外层循环 打印结果为:(10个数据) 0 与 0 乘积为 0 0 与 1 乘积为 0 0 与 2 乘积为 0 0 与 3 乘积为 0 0 与 4 乘积为 0 0 与 5 乘积为 0 0 与 6 乘积为 0 0 与 7 乘积为 0 0 与 8 乘积为 0 0 与 9 乘积为 0 0 与 10 乘积为 0 -------------------------------------------------------------------------------------
②continue
默认跳出本次循环 加上标签的话会跳出标签循环的语句的本次循环
打印1-100的笛卡尔积: Here: for i := 0; i < 100; i++ { for j := 0; j < 100; j++ { fmt.Println(i, "与", j, "乘积为", i*j) if j == 10 { continue Here } } } ------------------------------------------------------------------------------------- 因为有循环条件 一般的continue情况下应该是打印9900个数据 但是对标签进行跳过,就直接跳过了本次外层循环(相当于内置循环内有一个普通的break) 最终打印的数据只有1000个 -------------------------------------------------------------------------------------
③goto
选定一个位置写一个锚点,执行到goto语句时跳转到指定的锚点。
使用goto打印99乘法表 mystr := "%d*%d=%d\t" for i := 1; i < 10; i++ { j := 1 Here: if j <= i { fmt.Print(fmt.Sprintf(mystr, j, i, i*j)) j++ goto Here } else { fmt.Println() } }
总的来说,go语言在循环方面引入标签这一操作,相对于其他语言来说是一大特色,但是循环时加入这种标签会让一般人(特别是其他语言转入go语言的程序员很不适应,合理的使用事半功倍,不熟悉的情况下使用后患无穷),另外goto语句会破坏代码的逻辑严密,所以介意大家以后尽少使用。