学习go语言编程之流程控制

发布时间 2023-08-12 22:34:07作者: nuccch

Golang支持如下4种流程控制语句:

  1. 条件语句:if,else和else if
  2. 选择语句:switch,case和select
  3. 循环语句:for,range
  4. 跳转语句:goto

条件语句

示例代码:

a := 3
if a < 5 {
    fmt.Println(a, "litter than 5")
} else {
    fmt.Println(a, "not litter than 5")
}

关于条件语句,要注意以下几点:

  • 条件语句不要使用小括号()将条件包含起来
  • 不论语句体内有几条语句,花括号{}都是必须存在
  • 左花括号{必须与ifelse在同一行
  • if之后,条件语句之前,可以添加变量初始化语句,使用分号;分隔

选择语句

根据传入条件的不同,选择语句会执行不同的分支。
示例代码:

switch i {
case 0:
    fmt.Println("0")
case 1:
    fmt.Println("1")
case 2:
    fallthrough
case 3:
    fmt.Println("3")
case 4,5,6:
    fmt.Println("4, 5, 6")
default:
    fmt.Println("default")
}

i = 0,输出:0
i = 1,输出:1
i = 2,输出:3
i = 3,输出:3
i = 4,输出:4, 5, 6
i = 5,输出:4, 5, 6
i = 6,输出:4, 5, 6
i = 其他值,输出:default

有意思的是,switch后面的表达式都不是必须的,如下示例:

switch { // switch关键字之后没有表达式
case i >= 0 && i <= 3:
    fmt.Println("0-3")
case i >= 4 && i <= 6:
    fmt.Println("4-6")
}

关于选择语句,注意一下几点:

  • 左花括号{必须与switch处于同一行
  • 条件表达式不限制为常量或整数
  • 单个case中,可以出现多个结果选项
  • 不需要使用break语句退出case
  • 只有在case中出现了关键字fallthrough,才会继续执行紧跟的下一个case
  • 可以不设置switch之后的条件表达式

循环语句

Golang中的循环语句只支持for关键字。
示例代码:

sum := 0
for i = 0; i < 10; i++ {
    sum += 1
}

无限循环:

sum := 0
for {
    sum++
    if sum > 10 {
        break
    }
}

在循环语句的条件表达式中支持多重赋值:

a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a) - 1; i < j; i, j = i + 1, j - 1 {
    a[i], a[j] = a[j], a[i]
}

关于循环语句,注意以下几点:

  • 左花括号{必须与for在同一行
  • 支持使用continuebreak来控制循环

跳转语句

goto语句的语义非常简单,就是跳转到本函数内的某个标签。
示例语句:

// 如下使用goto语句实现了类似循环的效果
func gotoSample()  {
	i := 0
	HERE:
		fmt.Println(i)
	i++
	if i < 5 {
		goto HERE
	}
 }

输出:

0
1
2
3
4