Go基础编程:流程控制

  • A+
所属分类:Golang

Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。

  • 顺序结构:程序按顺序执行,不发生跳转。
  • 选择结构:依据是否满足条件,有选择的执行相应功能。
  • 循环结构:依据条件是否满足,循环多次执行某段代码。

选择结构

if语句

if

```
var a int = 3
if a == 3 { //条件表达式没有括号
fmt.Println("a==3")
}

//支持一个初始化表达式, 初始化字句和条件表达式直接需要用分号分隔
if b := 3; b == 3 {
    fmt.Println("b==3")
}

```

if … else

if a := 3; a == 4 {
fmt.Println("a==4")
} else { //左大括号必须和条件语句或else在同一行
fmt.Println("a!=4")
}

if … else if … else

if a := 3; a > 3 {
fmt.Println("a>3")
} else if a < 3 {
fmt.Println("a<3")
} else if a == 3 {
fmt.Println("a==3")
} else {
fmt.Println("error")
}

switch语句

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码:

```
var score int = 90

switch score {
case 90:
    fmt.Println("优秀")
    //fallthrough
case 80:
    fmt.Println("良好")
    //fallthrough
case 50, 60, 70:
    fmt.Println("一般")
    //fallthrough
default:
    fmt.Println("差")
}

```

可以使用任何类型或表达式作为条件语句:

```
//1
switch s1 := 90; s1 { //初始化语句;条件
case 90:
fmt.Println("优秀")
case 80:
fmt.Println("良好")
default:
fmt.Println("一般")
}

//2
var s2 int = 90
switch { //这里没有写条件
case s2 >= 90: //这里写判断语句
    fmt.Println("优秀")
case s2 >= 80:
    fmt.Println("良好")
default:
    fmt.Println("一般")
}

//3
switch s3 := 90; { //只有初始化语句,没有条件
case s3 >= 90: //这里写判断语句
    fmt.Println("优秀")
case s3 >= 80:
    fmt.Println("良好")
default:
    fmt.Println("一般")
}

```

循环语句

for

```
var i, sum int

for i = 1; i <= 100; i++ {
    sum += i
}
fmt.Println("sum = ", sum)

```

range

```
s := "abc"
for i := range s { //支持 string/array/slice/map。
fmt.Printf("%c\n", s[i])
}

for _, c := range s { // 忽略 index
    fmt.Printf("%c\n", c)
}

```

跳转语句

break和continue

在循环里面有两个关键操作break和continue,break操作是跳出当前循环,continue是跳过本次循环。

for i := 0; i < 5; i++ {
if 2 == i {
//break //break操作是跳出当前循环
continue //continue是跳过本次循环
}
fmt.Println(i)
}

当嵌套过深的时候,break和continue还可以跟着标号,用来跳到多重循环中的外层循环:

func main() {
LABEL:
for i := 0; i < 5; i++ {
for {
fmt.Println(i)
break LABEL //跳出所有循环
//continue LABEL //只是跳过for {}循环,外层循环继续
}
}
}

注意:break可⽤于for、switch、select,⽽continue仅能⽤于for循环。

goto

用goto跳转到必须在当前函数内定义的标签:

func main() {
LABEL:
for i := 0; i < 5; i++ {
for {
fmt.Println(i)
//break LABEL //跳出所有循环
//continue LABEL //只是跳过for {}循环,外层循环继续
goto LABEL //跳转到标签LABEL,从这里开始,执行代码
}
}
}

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin