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

Go-switch语句中的大小写重复,go,Go,我是新手,在尝试删除switch语句中的一些重复代码时,我添加了一个类似如下的故障案例: 但是,我收到了关于重复案例的错误,例如: 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 为什么这是一个错误?有什么方法可以指示编译器允许这样的代码吗?每个值只能有一个ca

我是新手,在尝试删除switch语句中的一些重复代码时,我添加了一个类似如下的故障案例:

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

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

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

每个值只能有一个case语句,因此代码是非法的。此外,fallthrough只工作一次,所以即使它按照您希望的方式为0工作,也会为1失败


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

每个值只能有一个case语句,因此代码是非法的。此外,fallthrough只工作一次,所以即使它按照您希望的方式为0工作,也会为1失败


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

在当前的Go中,这种行为的原因是开关的实现方式类似于if-else-if。显然,如果1,否则如果1没有意义,那么你会得到这个错误

现在,没有办法强制编译器这样做。你必须重写你的陈述才能得到你想要的效果


根据,这一限制将在未来的Go版本中取消

在当前的Go中,出现这种行为的原因是开关的实现方式类似于if-else-if。显然,如果1,否则如果1没有意义,那么你会得到这个错误

现在,没有办法强制编译器这样做。你必须重写你的陈述才能得到你想要的效果


根据,这一限制将在未来的Go版本中取消

即使重复的案例不是一个错误,这段代码也不会像你期望的那样-在失败之后,你会输入案例0块,即使我是1。啊,我明白了。不知怎的,我得到的印象是,与C不同,它会在故障诊断时检查案例条件!即使重复的案例不是一个错误,这段代码也不会像你期望的那样-在失败之后,你会输入案例0块,即使我是1。啊,我明白了。不知怎的,我得到的印象是,与C不同,它会在故障诊断时检查案例条件!我看不到有证据表明会在那里被解除。我看到的讨论充其量也没有明确的决议,倾向于一个决议。还要注意的是,即使取消了限制,switch仍然只会执行第一个匹配的案例,而不是所有的案例。我看不到将在那里取消限制的证据。我看到的讨论充其量也没有明确的决议,倾向于一个决议。还要注意的是,即使取消了限制,switch仍然只会执行第一个匹配的案例,而不是全部。
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