ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[success]## **for语法介绍** ### 第一种写法 ``` package main import "fmt" func main() { for i := 0;i < 10;i++{ fmt.Printf("hello 欢迎来学习go语言%v\n",i) fmt.Println(i) } } ``` <br> <br> ### 第二种写法 ``` package main import "fmt" func main() { var j int = 3 for j <= 7{ fmt.Println("第二种写法") j++ } } ``` <br> <br> ### for循环细节 for循环返回一定是bool类型 <br> <br> >[success] ## **for循环的2种方式** **1)传统方式** for遍历字符串 ``` package main import "fmt" func main() { var sum string = "你好我是呵呵" for i := 0;i < len(sum);i++{ fmt.Printf("%c",sum[i]) } } ``` <br> <br> >[info] ### **运行结果:** 该细节: 如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。**原因是传统的对字符串的遍历是按照****1个字节来遍历**,而一个**汉字在utf8编码是对应3个字节。** 如何解决需要要将str 转成[ ]rune 切片:=>体验一把 把string类型强制转换成rune ``` package main import "fmt" func main() { var sum string = "你好我是呵呵" s1 := []rune(sum) for i := 0;i < len(s1);i++{ fmt.Printf("%c",s1[i]) } } ``` 1)使用for range(range是按照字符来遍历,上面的代码是按照字节来遍历) ``` package main import "fmt" func main() { var sum string = "你好我是呵呵" for index,value:= range sum{ fmt.Printf("index = %d\nvalue = %c\n",index,value) } } ``` >[info] **运行结果:** index = 0 value = 你 index = 3 value = 好 index = 6 value = 我 index = 9 value = 是 index = 12 value = 呵 index = 15 value = 呵 <br> <br> 在家加点数字 ``` package main import "fmt" func main() { var sum string = "你好我是呵呵09123" for index,value:= range sum{ fmt.Printf("index = %d\nvalue = %c\n",index,value) } } ``` >[info] **运行结果:** index = 0 value = 你 index = 3 value = 好 index = 6 value = 我 index = 9 value = 是 index = 12 value = 呵 index = 15 value = 呵 index = 18 value = 0 index = 19 value = 9 index = 20 value = 1 index = 21 value = 2 index = 22 value = 3 <br> <br> <br> >[success]## **退出循环3种方式** ### 1)**break** * [ ] break语句可以结束for、switch和select的代码块。 * [ ] break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。 * [ ] break会默认跳出最近的for循环 * [ ] break可以跳出指定的标签 ``` package main import "fmt" func main() { BREAKDEMO1: for i := 0;i <= 10;i++{ for j := 0;j <= 10;j++{ if j == 5{ break BREAKDEMO1 } fmt.Printf("%v-%v\n",i,j) } } fmt.Println(".....") } ``` <br> <br> ### **2)Goto:** * [ ] **goto(跳转到指定标签)** * [ ] goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。 例如双层嵌套的for循环要退出时: * [ ] Go中不主张使用goto,避免程序混乱 ``` package main import "fmt" func main() { for i := 0;i <= 10;i++{ for j := 0;j <= 10;j++{ if j == 5{ goto detog } fmt.Printf("%v-%v\n",i,j) } } detog: fmt.Println("程序退出了") } ``` <br> <br> ### **3)continue(继续下次循环)** * [ ] continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。在 continue语句后添加标签时,表示开始标签对应的循环。例如: ``` package main import "fmt" func main() { for i := 0;i <= 10;i++{ for j := 0;j <= 10;j++{ if j == 5{ continue fmt.Printf("%v\n",j) } fmt.Println("程序继续执行") } } } ``` <br> <br> >[warning] ## **练习题** 99乘法表 ``` package main import "fmt" func main() { for i := 1;i < 10;i++{ for j := 1;j <= i;j++{ fmt.Printf("%d * %d = %d\n",i,j,i*j) } } } ``` <br> <br> 随机生成1-100的数,生成到99时break退出,且记录生成的次数 ``` package main import ( "fmt" "math/rand" "time" ) func main() { var cont int = 0 for { rand.Seed(time.Now().UnixNano()) n := rand.Intn(100) + 1 fmt.Println(n) cont++ if n == 99{ break } } fmt.Printf("共生成了%d\n",cont) } ``` 共生成了357