Go 语言基础之流程控制

Go 中的流程控制主要有if elseforfor rangeswitch

if else 条件判断

与大多数语言中的 if else 类似,它的结构如下:

if 表达式1 {
    分支1
} else if 表达式2 {
    分支2
} else{
    分支3
}

不同之处在于,它的表达式部分不需要用 () 包住。例子:

package main

import "fmt"

func main() {
	score := 65
	if score >= 90 {
		fmt.Println("A")
	} else if score >= 80 {
		fmt.Println("B")
	} else {
		fmt.Println("C")
	}
}

还有需要注意的是,它的起始花括号必须紧跟表达式后面,不可以另起一行,像这样就是错的:

func main() {
	score := 65
	if score >= 90 
	{                                  // 起始 { 不可以单独一行,需要紧跟表达式后面
		fmt.Println("A")
	}
}

除此之外, if 条件判断还有一个特殊写法:

func main() {
	if score := 65; score >= 90 {
		fmt.Println("A")
	} else if score >= 80 {
		fmt.Println("B")
	} else {
		fmt.Println("C")
	}

        fmt.Println(score) // error,获取不到score
}

此种写法将变量赋值放到 if 表达式中,此时变量 score 是一个局部变量,在 if 之外是获取不到的。

for 循环

Go 中的 for 循环与大多数语言也类似,结构:

for 初始语句;条件表达式;结束语句{
    循环体语句
}

它与 if else 一样,一是表达式不用 () 来包住;二是起始 { 要紧跟在语句后面,不可以另起一行。

例子:

func main() {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
}

for 循环的初始语句可以忽略,但初始语句后面的 ; 必须写:

func main() {
	i := 0
	for ; i < 10; i++ {
		fmt.Println(i)
	}
}

例子中变量 i 的初始化拿到 for 循环的外面实现了,for 循环依旧可以执行。

不仅仅初始语句可以忽略,结束语句也可以忽略,如下:

func main() {
	i := 0
	for i < 10 {
		fmt.Println(i)
		i++
	}
}

例子中,for 循环语句只保留了条件表达式,初始语句和结束语句都被拆出来实现,for 循环正常执行。

switch case

Go 中 switch case 与多数语言中的也类似,用法也是大同小异。

基本用法:

func main() {
    week:=3
    switch week {
    case 0:
        fmt.Println("周日")
    case 1:
        fmt.Println("周一")
    case 2:
        fmt.Println("周二")
    case 3:
        fmt.Println("周三")
    case 4:
        fmt.Println("周四")
    case 5:
        fmt.Println("周五")
    default:
        fmt.Println("周六")
    }
}

注意每个 switch 只能有一个 default。

一个分支可以有多个值,多个case值中间使用英文逗号分隔:

func main() {
    num:=1
    switch num {
    case 1,3,5,7,9:
        fmt.Println("这是奇数")
    case 2,4,6,8,0:
        fmt.Println("这是偶数")
    default:
        fmt.Println(num)
    }
}

也可以把赋值放在switch里:

func main() {
    switch num:=1; num {
    case 1,3,5,7,9:
        fmt.Println("这是奇数")
    case 2,4,6,8,0:
        fmt.Println("这是偶数")
    default:
        fmt.Println(num)
    }
}

分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量。例如:

func main() {
    score:=90
    switch  {
    case score>=90:
        fmt.Println("优秀")
    case score>=80:
        fmt.Println("良好")
    case score>=60:
        fmt.Println("及格")
    }
}

fallthrough 可以执行满足条件的 case 的下一个 case:

func main() {
    b:=true
    switch b {
    case true:
        fmt.Println(1)
        fallthrough
    case false:
        fmt.Println(2)
    }
}

如上,不加 fallthrough 只打印 1,加上 fallthrough 打印 1 和 2。

for range

Go 语言中的 for range 是一个强大的功能,它可以遍历数组,切片,字符串,map 和 通道(channel)。各自遍历出的结果是:

  1. 数组,切片和字符串遍历返回索引和值
  2. map 返回键和值
  3. 通道只返回通道内的值

这些在后面遇到具体类型时会一一介绍,这里就略过了。

结尾

本节主要介绍了 Go 中的流程控制,与大多数语言中用到的基本大同小异,个别差异注意一下就可以。

如有错误,欢迎指出。

原文地址:https://www.cnblogs.com/wjaaron/p/14832205.html