我是Go
的新用户,在尝试删除交换机语句中的一些重复代码时,我添加了一个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
为什么这是一个错误?有没有办法指示编译器允许这样的代码?
答案 0 :(得分:4)
在当前的Go中,此行为的原因是switch
的实现方式与if-else-if
类似。显然,if (1) else if (1)
没有意义,因此您会收到此错误。
目前,没有办法强制编译器执行此操作。你必须重写你的陈述才能获得你想要的效果。
Per this bug report comment supposedly quoting Rob Pike,此限制将在未来的Go版本中解除。
答案 1 :(得分:1)
每个值只能有一个case语句,因此该代码是非法的。另外,fallthrough只能运行一次,所以即使它按照你想要的0工作,它仍然会失败1。
最简单的解决方案是将最初的0,1个案例放在自己的交换机中或者在主交换机之前。