前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GO语言基础之条件语句switch

GO语言基础之条件语句switch

原创
作者头像
墨紫羽墨
修改2022-01-13 11:12:42
3870
修改2022-01-13 11:12:42
举报
文章被收录于专栏:FutureTesterFutureTester

switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个if else子句的常用方式。

代码语言:javascript
复制
switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。

代码语言:javascript
复制

func test1() {
	// 常规switch语句
	a := 1
	switch a {
	case 1:
		fmt.Println("test1 a = 1")
	case 2:
		fmt.Println("test1 a = 2")
	case 3:
		fmt.Println("test1 a = 3")
	}
}

switch 语句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个 switch 语句等同于switch true,并且每个case表达式都被认定为有效,相应的代码块也会被执行。

代码语言:javascript
复制
func test4() {
	// switch后面不接条件,条件放在case里面
	a := 1
	switch {
	case a == 1:
		fmt.Println("test4 a = 1")
	case a == 2:
		fmt.Println("test4 a = 2")
	case a == 3:
		fmt.Println("test4 a = 3")
	default:
		fmt.Println("test4 a不符合要求")
	}
}

Go 中,每执行完一个 case 后,会从 switch 语句中跳出来,不再做后续 case 的判断和执行。使用fallthrough语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中。

代码语言:javascript
复制
func test5() {
	// fallthrough
	a := 2
	switch {
	case a == 1:
		fmt.Println("test5 a = 1")
	case a == 2:
		fmt.Println("test5 a = 2")
		fallthrough
	case a == 3:
		fmt.Println("test5 a = 3")
	default:
		fmt.Println("test5 a不符合要求")
	}
}

三、完整例子

代码语言:javascript
复制
package main

import "fmt"

func test1() {
	// 常规switch语句
	a := 1
	switch a {
	case 1:
		fmt.Println("test1 a = 1")
	case 2:
		fmt.Println("test1 a = 2")
	case 3:
		fmt.Println("test1 a = 3")
	}
}

func test2() {
	// switch赋值和判断都放switch里面
	switch a := 1; a {
	case 1:
		fmt.Println("test2 a = 1")
	case 2:
		fmt.Println("test2 a = 2")
	case 3:
		fmt.Println("test2 a = 3")
	}
}

func test3() {
	// 一个case里面包含两个结果
	switch a := 5; a {
	case 1:
		fmt.Println("test3 a = 1")
	case 2:
		fmt.Println("test3 a = 2")
	case 3, 4:
		fmt.Println("test3 a = 3或4")
	default:
		fmt.Println("test3 a不符合要求")
	}
}

func test4() {
	// switch后面不接条件,条件放在case里面
	a := 1
	switch {
	case a == 1:
		fmt.Println("test4 a = 1")
	case a == 2:
		fmt.Println("test4 a = 2")
	case a == 3:
		fmt.Println("test4 a = 3")
	default:
		fmt.Println("test4 a不符合要求")
	}
}

func test5() {
	// fallthrough
	a := 2
	switch {
	case a == 1:
		fmt.Println("test5 a = 1")
	case a == 2:
		fmt.Println("test5 a = 2")
		fallthrough
	case a == 3:
		fmt.Println("test5 a = 3")
	default:
		fmt.Println("test5 a不符合要求")
	}
}

func main() {
	test1()
	test2()
	test3()
	test4()
	test5()
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档