为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
跃然一笑 2021-07-28 16:38:02
我是新手Go,在尝试删除 switch 语句中的一些重复代码时,我添加了一个案例,fallthrough如下所示:i := 1switch i {case 0, 1:    fmt.Println("common code")    fallthroughcase 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:10prog.go:15: duplicate case 1 in switch    previous case at prog.go:10为什么这是一个错误?有什么方法可以指示编译器允许这样的代码吗?
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这种行为的原因,在当前的 Go 中,是switchif-else-if. 显然,if (1) else if (1)没有意义,因此您会收到此错误。

现在,没有办法强制编译器这样做。你必须重写你的语句以获得你想要的效果。


查看完整回答
反对 回复 2021-08-02
?
慕的地10843

TA贡献1785条经验 获得超8个赞

每个值只能有一个 case 语句,因此该代码是非法的。此外,fallthrough 只能工作一次,所以即使它在 0 时如你所愿,它仍然会在 1 时失败。

最简单的解决方案是将初始的 0,1 case 放在它自己的开关中,或者放在主开关之前。


查看完整回答
反对 回复 2021-08-02
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信