Go语言中一个fallthrough的使用问题

博客主要介绍了Go语言中fallthrough关键词的使用。与Java、PHP不同,Go的switch case默认执行完自动break,若要顺序透传需手动添加fallthrough。同时指出fallthrough会直接传递给下一个case,不判断条件,且在使用switch判断interface{}类型时,不允许使用fallthrough。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相信学习Go语言的小伙伴对fallthrough这个关键词并不陌生,与Java、PHP等语言不同,Go语言的switch case语句不需要在每个case后面添加break语句,默认在执行完case之后,会自动break,从switch语句中转义出来。

而我们想要使程序能顺序透传到下个case中,这时我们就需要手动添加上fallthrough关键词,例如:

package main

import (
	"fmt"
	"time"
)

func main() {
	switch num := time.Now().Month(); {
	case num <= 3:
		fmt.Println("当前是第一季度")
	case num > 6:
		fmt.Println("当前是下半年")
	default:
		fmt.Println("未知月份")
	}
}

执行后结果当然会输出:当前是第一季度

而不会继续执行,输出“当前是下半年”或是“未知年份”的提示。

这时我可以使用fallthrough关键词来强制执行下面的case语句的内容。

package main

import (
	"fmt"
	"time"
)

func main() {
	switch num := time.Now().Month(); {
	case num <= 3:
		fmt.Println("当前是第一季度")
		fallthrough
	case num > 6:
		fmt.Println("当前是下半年")
	default:
		fmt.Println("未知月份")
	}
}

这时执行代码后,会输出

当前是第一季度

当前是下半年

这里我们需要注意一下,fallthrough的透传会直接传递给下一个case,而不会去判断下一个case的条件。

但有一种情况是无法使用fallthrough来进行透传的,示例如下:

package main

import (
	"fmt"
)

func main() {
	var num interface{}
	var num1 int = 1
	num = num1
	switch num.(type) {
	case int:
		fmt.Printf("当前num类型是:%T\n", num)
    fallthrough
	case float64:
		fmt.Printf("当前num类型是:%T\n", num)
	default:
		fmt.Printf("当前num类型是:%T\n", num)
	}
}


这时候,如果你使用vscode来开发,会提示一个红色的波浪线,这就表明代码是有问题的,我们看这个提示,fallthrough statement out of place,翻译过来就是fallthrough这个声明不合适,那和刚才的示例不一样了啊。我们点这个错误提示进去。

在这里插入图片描述

很显然这是个错误示例,那也就是说官方不允许这样使用。
从上面的代码来看,我们使用switch判断interface{}的类型的时候,是不被允许使用fallthrough的。
这里我理解是type-switch是一种特殊的组合,专门用来判断interface{}类型的,一个interface{}也不会有两种类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值