一架梯子,一头程序猿,仰望星空!

go语言流程控制语句


go语言的流程控制语句主要有if、for、switch三种。

1. if语句

语法1:

if 条件表达式 {
}

if语句条件表达式,不需要括号包括起来, 左边的 { 花括号不能换行。

例子:

package main

import "fmt"

// 入口函数main
func main() {
	// 给变量i赋值
	i := 101
	if i > 100 {
		fmt.Println("大于100")
	}
}

语法2:

if 初始化语句; 条件表达式 {
}

可以在条件表达式之前,编写简单的初始化语句。

例子:

package main

import "fmt"

// 入口函数main
func main() {
        // 先执行初始化语句,i变量初始化值为200,然后判断条件。
	if i := 200; i > 100 {
		fmt.Println("大于100")
	}
}

语法3:

// 格式1
if 条件表达式 {
} else {
}

// 格式2
if 条件表达式1 {

} else if 条件表达式2 {

} else {

}

例子:

package main

import "fmt"

// 入口函数main
func main() {
	if i := 200; i > 100 {
		fmt.Println("大于100")
	} else { // 注意 花括号 { 不能换行
		fmt.Println("小于100")
	}
}

2. for循环语句

Go语言的for语句,非常灵活,可以表达其他语言的for、while循环语句。

语法1:

这种语法格式,跟其他语言类似,区别就是忽略了括号。

for 初始化语句; 条件表达式; 后置语句 {
}
  • 初始化语句 - 循环开始之前执行的语句
  • 条件表达式 - 每次循环迭代开始之前执行的表达式
  • 后置语句 - 每次循环迭代结束之后执行的语句

例子:

package main

import "fmt"

func main() {
	sum := 0
        // 循环10次
	for i := 0; i < 10; i++ { // 注意: { 括号不能换行
		sum += i
	}
	fmt.Println(sum)
}

语法2:

for 条件表达式 {
}

忽略了初始化语句和后置语句,这种语法就变成了,其他语言的while语句。

例子:

package main

import "fmt"

func main() {
	sum := 1
        // 类似while语句,如果sum < 1000 则执行循环
	for sum < 1000 {
		sum += sum
	}
	fmt.Println(sum)
}

语法3:

for {
}

忽略了,条件表达式,这种语法表示死循环,在网络编程中非常常用。

例子:

package main

import (
	"fmt"
	"time"
)

func main() {
    // 死循环,每秒打印一次hello
    for {
        fmt.Println("hello")
	time.Sleep(time.Second)
    }
}

3. switch语句

语法:

switch 初始化语句; 条件表达式 {
case 条件1:
    语句1
case 条件2:
    语句2
default:
    默认语句
}

说明:

  • 初始化语句是可选的
  • 条件表达式也是可选的
  • case语句不需要break,匹配多个case语句,只会执行第一个case语句。

例子:

package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Print("当前系统环境是: ")

        // 我们通过runtime包的GOOS常量判断,当前系统环境
        // 首先通过初始化语句,获取系统常量,然后通过os变量判断case语句
	switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("OS X.")
	case "linux":
		fmt.Println("Linux.")
	default:
		// 其他系统
		fmt.Printf("%s.\n", os)
	}
}

例子2:

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("什么时候到星期6?")
	// 获取今天是一周的第几天
	today := time.Now().Weekday()

	// time.Saturday = 6
	// 通过switch判断,到星期六还有几天
	switch time.Saturday {
	case today + 0:
		fmt.Println("今天.")
	case today + 1:
		fmt.Println("明天.")
	case today + 2:
		fmt.Println("还有两天.")
	default:
		fmt.Println("还有好多天.")
	}
}
  • case语句支持表达式计算。

例子3:

package main

import (
	"fmt"
	"time"
)

func main() {
        // 通过time包的Now函数获取当前时间
	t := time.Now()
        // switch忽略了表达式
	switch {
	case t.Hour() < 12:
		fmt.Println("早上好!")
	case t.Hour() < 17:
		fmt.Println("下午好.")
	default:
		fmt.Println("晚上好.")
	}
}

switch语句忽略表达式之后,case语句就变成if语句了,那个case语句的表达式判断成功就执行那个。(如果有多个case语句表达式匹配成功,只会执行第一个case语句)