Skip to content

Go 语言笔记:选择语句

选择语句

Go 语言中的选择语句也是通过 switchcase 关键字来实现的。

go
// 写法1
expression := ""
switch expression {
  case expression1:
    ...
  case expression2:
    ...
  default:
    ...
}

// 写法2,expression 的作用域在 switch 内
switch expression := ""; expression {
}

Java 不同的是这里不需要在每个 case 语句执行的代码结尾添加 break

多值 case 以及 default 可选

case 选项不允许出现重复的值,但是 case 后面可以带多个值,以逗号隔开;另外 default 是可选的;因为 case 不允许出现重复的值,那么只要遇见一个 case 匹配上,那么则终止选择。

go
season := "winter"
switch season {
  case "winter":
    fmt.Println("寒冷")
  case "summer":
    fmt.Println("炎热")
  case "spring":
    fmt.Println("风和日丽")
  default:
    fmt.Println("秋高气爽")
}

switch season {
  case "winter":
    fmt.Println("日照短暂")
  case "summer", "spring", "autumn":
    fmt.Println("日照充足")
}

无条件表达式的 switch

如果 switch 后没有条件表达式,那么则认为是 switch true 的情形,此时可以认为相当于是条件语句的变种。

go
season := "winter"
switch {
  case season == "winter":
    fmt.Println("yes")
  case season == "summer":
    fmt.Println("no")
}

switch 后可跟函数

switch 后面可以是一个函数,要求 case 的值类型与函数的返回值一致即可。

go
func getSeason(month int) string {
	if month > 3 && month < 7 {
		return "summer"
	}
	return "other"
}

func main() {
	switch getSeason(5) {
	case "summer":
		fmt.Println("夏天")
	default:
		fmt.Println("other")
	}
}

fallthrough 穿透

通常情况下,只要遇见一个 case 满足条件,则直接退出整个 switch ,但是 fallthrough 关键字可以允许你穿透本次匹配的 case 块,执行下一个分支的代码块,即使其条件并不匹配。fallthrough 后面必须还有其他分支 case 活着 default

go
season := "winter"
switch {
  case season == "winter":
    fmt.Println("yes")
    fallthrough
  case season == "summer":
    fmt.Println("no")
}

// 打印结果
yes
no

Released under the MIT License.