Go - switch 语句中的重复大小写

我是新手Go,在尝试删除 switch 语句中的一些重复代码时,我添加了一个案例,fallthrough如下所示:


i := 1

switch i {

case 0, 1:

    fmt.Println("common code")

    fallthrough

case 0:

    fmt.Println("aux for 0")

case 1:

    fmt.Println("aux for 1")

default:

    fmt.Println("other number")


}

但是,我收到了关于重复案例的错误,例如:


prog.go:13: duplicate case 0 in switch

    previous case at prog.go:10

prog.go:15: duplicate case 1 in switch

    previous case at prog.go:10

为什么这是一个错误?有什么方法可以指示编译器允许这样的代码吗?


跃然一笑
浏览 180回答 2
2回答

潇潇雨雨

这种行为的原因,在当前的 Go 中,是switch像if-else-if. 显然,if (1) else if (1)没有意义,因此您会收到此错误。现在,没有办法强制编译器这样做。你必须重写你的语句以获得你想要的效果。

慕的地10843

每个值只能有一个 case 语句,因此该代码是非法的。此外,fallthrough 只能工作一次,所以即使它在 0 时如你所愿,它仍然会在 1 时失败。最简单的解决方案是将初始的 0,1 case 放在它自己的开关中,或者放在主开关之前。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go