if/else 基本使用
if/else应该是每个编程语言中都具备的基本分支结构。
需要注意的是if||else与{要放在同一行上,否则会抛出异常。
另外,当多个else if出现时,不同分支只会执行一个。
if 表达式1 { 分支1 } else if 表达式2 { 分支2 } else{ 分支3 }如下,判断成绩的等级。
package main import ( "fmt" ) func main() { var grades int8 = 82 if grades > 90{ fmt.Println("成绩优异") }else if grades > 80{ fmt.Println("成绩不错") }else if grades > 60{ fmt.Println("成绩及格") }else if grades > 40 { fmt.Println("成绩较差") }else{ fmt.Println("建议退学") } } 作用域if分支代码块具有块级作用域。我们可以在执行if时定义一个变量,该变量不能在块级作用域外使用。
注意:只能使用短变量的声明方式
package main import ( "fmt" ) func main() { if grades := 82; grades > 90{ fmt.Println("成绩优异") }else if grades > 80{ fmt.Println("成绩不错") }else if grades > 60{ fmt.Println("成绩及格") }else if grades > 40 { fmt.Println("成绩较差") }else{ fmt.Println("建议退学") } } switch/case 基本使用switch/case可以让上述代码变得更加简洁。
同其他语言一样,一个switch中只能有一个default,default通常放在最下面。
package main import ( "fmt" ) func main() { var grades int8 = 82 switch{ case grades > 90 : fmt.Println("成绩优异") // 不需要进行break case grades > 60 : fmt.Println("成绩及格") case grades > 40: fmt.Println("成绩较差") default: fmt.Println("建议退学") } } 作用域
同样,switch也拥有块级作用域。我们可以在switch作用域内定义一个变量,该作用域外不能使用该变量。
package main import ( "fmt" ) func main() { switch grades := 82; { // 注意结束的分号 case grades > 90: fmt.Println("成绩优异") // 不需要进行break case grades > 60: fmt.Println("成绩及格") case grades > 40: fmt.Println("成绩较差") default: fmt.Println("建议退学") } } fallthroughfallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。
package main import ( "fmt" ) func main() { switch age := 18; { // 注意结束的分号 case age < 18: fmt.Println("未成年") case age >= 18: fmt.Println("成年了") fallthrough // 穿透,执行下一个case 无论是否为true case age > 30: fmt.Println("生活忙碌") default: fmt.Println("枯燥无味") } // 成年了 // 生活忙碌 } for 索引循环
条件为true循环,条件为false则退出循环。
下面是使用索引循环对数组进行遍历。
package main import ( "fmt" ) func main() { var arr = [...]string{"①","②","③","④","⑥"} // 定义string数组 for index := 0; index < len(arr); index++{ fmt.Println(index) // 打印索引值 fmt.Println(arr[index]) // 打印元素值 } } 迭代变量迭代变量可以在for循环的外部定义,但是必须要使用;进行占位。
package main import ( "fmt" ) func main() { var arr = [...]string{"①","②","③","④","⑥"} // 定义string数组 var index int; // int类型默认为0 for ; index < len(arr); index++{ fmt.Println(index) // 打印索引值 fmt.Println(arr[index]) // 打印元素值 } } while循环由于Go语言中没有while循环,所以while循环可以用for来进行完成。
具体的步骤就是省略迭代变量,省略结束条件。
package main import ( "fmt" ) func main() { var counter int for { if counter >= 5 { break } fmt.Printf("第%d次执行\n", counter+1) counter++ } } for/range普通的索引循环只能拿出索引,因此十分的不方便。此时可使用for/range,迭代变量有两个。
第一个为索引值,第二个为元素本身。
package main import ( "fmt" ) func main() { var arr = [...]string{"①", "②", "③", "④", "⑥"} // 定义string数组 for index, element := range arr{ fmt.Printf("索引值:%d\n", index) fmt.Printf("元素值:%v\n", element) } } 退出循环 goto当有多层循环嵌套时,可给一个代码块指定一个标签,当执行到该标签时,跳转到标签代码块。
package main import ( "fmt" ) func main() { for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 5 { goto TAG } fmt.Println(j) } } TAG: fmt.Println("执行标签代码块") return // 结束main函数 } breakbreak用于跳过本层循环。
package main import ( "fmt" ) func main() { for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 5 { fmt.Println("跳过本层循环") break } } fmt.Println("执行外层循环") break } fmt.Println("代码执行结束") } continue