ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 条件语句 ~~~go if a > b { } else { } ~~~ ### 与其他主要编程语⾔的差异 1. condition 表达式结果必须为布尔值 2. ⽀持变量赋值: ```go if var declaration; condition { } ``` ## 选择语句 switch 与其他主要编程语⾔的差异 1. 条件表达式不限制为常量或者整数; 2. 单个 case 中,可以出现多个结果选项, 使⽤逗号分隔; 3. 与 C 语⾔等规则相反, Go 语⾔不需要⽤break来明确退出⼀个 case; 4. 可以不设定 switch 之后的条件表达式,在此种情况下,整个 switch 结 构与多个 if…else… 的逻辑作⽤等同 ![](https://box.kancloud.cn/b17890a6ed514faddbf5a9a134dad186_351x491.png) * switch 语句基于不同的条件执行不同的动作,每个case分支都是唯一的 * switch 语句从上到下逐一测试,直至匹配为止;如果希望继续执行下一个case,需要使用**fallthrough** * switch 语句还可用于type-switch来判断某个interface中实际存储的变量类型 * 支持初始化表达式,右侧需要跟分号 ~~~go switch var { case condition1: code block1 case condition2: code block2 default: code block3 } ~~~ ### 判断变量类型 ~~~ package main import "fmt" func main() { var test interface{} test = true switch test.(type) { case int: fmt.Print("整型") case string: fmt.Print("字符串") default: fmt.Print("都不是") } } ~~~ ### switch 中含赋值语句和条件 ```go switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.”) //break case "linux": fmt.Println("Linux.") default: // freebsd, openbsd, // plan9, windows... fmt.Printf("%s.", os) } ``` ### 实现多个 if ```go switch { case 0 <= Num && Num <= 3: fmt.Printf("0-3") case 4 <= Num && Num <= 6: fmt.Printf("4-6") case 7 <= Num && Num <= 9: fmt.Printf("7-9") } ``` ## 循环语句 for ![](https://gitee.com/echohiyang/markdown-images/raw/master/BsJaPi.jpg) ~~~go # 方式1 无限循环 for true { } for { } ~~~ ~~~ # 方式2 条件循环 for init;condition;increase { } ~~~ ~~~ # 方式3 遍历数组 package main import "fmt" func main() { a := []string{"a","b","c"} for key,val := range a { fmt.Print(key) fmt.Print(val) fmt.Print("\n") } } ~~~ ~~~ # 方式4 while 条件循环 n := 0 for n < 5 { n++ fmt.Println(n) } ~~~ ## 循环体内的变量每次都是重新生成的 ~~~ package main import "fmt" func main() { for i := 1; i <= 3; i++ { v := 1 fmt.Println(&v) } } ## result 0xc420014060 0xc420014068 0xc420014080 } ~~~ ## 跳转语句 goto break continue ![](https://gitee.com/echohiyang/markdown-images/raw/master/nmtfkC.jpg) * 这三个语句都可以配合标签使用 * break和continue配合标签可以跳出多层循环 * goto是调整位置,与其他两个语句配合标签的结果并不相同 ### goto 跳转到指定语句 ~~~go goto One fmt.Print("middle code") One: fmt.Print("last code") ~~~ ### break 跳出本层循环 ~~~ package main import "fmt" func main(){ LABLE1: for { for i := 1; i <= 10; i++ { if i < 3 { fmt.Println(i) } else { break LABLE1 } } } fmt.Println("break") } ~~~ ### continue 跳出本次循环,进行下一次循环