7、流程控制
7.1、if语句
if条件判断基本写法
Go语言中if
条件判断的格式如下:
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}
package main
import "fmt"
// if条件判断
func main() {
age := 19
if age > 18{
fmt.Println("你成年了")
} else{
fmt.Println("你没成年,小屁孩")
}
// 多个条件判断
if age > 18{
fmt.Println("你成年了")
} else if age > 30{
fmt.Println("可以去世了")
} else{
fmt.Println("太老了")
}
if age := 19; age >18{
fmt.Println("太大了")
}else{
fmt.Println("太大了")
}
}
7.2、for 语句
Go 语言中的所有循环类型均可以使用for
关键字来完成。
for循环的基本格式如下:
for 初始语句;条件表达式;结束语句{
循环体语句
}
package main
import "fmt"
// for循环
func main() {
// 基本格式
for i := 0;i < 10;i++{
fmt.Println(i)
}
// 变种1
var i = 5
for ; i < 10;i++{
fmt.Println(i)
}
// 变种2 -- 死循环
var a = 5
for a < 10{
fmt.Println(a)
}
// 无限循环
for{
fmt.Println("你是傻逼")
}
}
7.3、for range(键值循环)
Go语言中可以使用for range
遍历数组、切片、字符串、map 及通道(channel)。 通过for range
遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
for key, val := range coll {
...
}
s := "hello world"
for i, v := range s{
fmt.Printf("%d %c\n",i,v)
}
7.4、switch语句
不需要用break
package main
import "fmt"
// switch
func main() {
fintal := 3
switch fintal {
case 1:
fmt.Printf("%d",fintal)
case 2:
fmt.Printf("%d",fintal)
case 3:
fmt.Printf("%d",fintal)
default:
fmt.Println("都没有")
}
}
fallthrough关键字
为了兼容c语言
package main
import "fmt"
func main() {
switch n:=3;n {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("3")
// 还会往下执行代码
fallthrough
case 4:
fmt.Println("等于4")
default:
fmt.Println("吊毛重新输入")
}
}
执行结果有4,是因为有fallthrough
7.5、goto(跳转到指定标签)
普通跳转
package main
import "fmt"
func main() {
var breakFlag bool
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 设置退出标签
breakFlag = true
break
}
fmt.Printf("%v-%v\n", i, j)
}
// 外层for循环判断
if breakFlag {
break
}
}
}
goto实现
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
// 设置退出标签
goto breakTag
}
fmt.Printf("%v-%v\n", i, j)
}
}
breakTag:
fmt.Println("结束for循环")
}