重复的 switch case¶
ID: go/duplicate-switch-case
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- maintainability
- correctness
- external/cwe/cwe-561
Query suites:
- go-security-and-quality.qls
如果“switch”语句中的两个 case 相同,则第二个 case 将永远不会被执行。这很可能表明在复制粘贴时,第一个 case 被复制后没有进行正确的调整。
建议¶
检查这两个 case,找出它们要检查的内容。如果条件和主体都相同,则第二个 case 是可以删除的重复代码。否则,需要调整第二个 case。
示例¶
在下面的示例中,函数 controller
检查其参数 msg
以确定它要执行的操作。但是,第二个 case 的条件与第一个 case 相同,因此该 case 将永远不会被执行。
package main
func controller(msg string) {
switch {
case msg == "start":
start()
case msg == "start":
stop()
default:
panic("Message not understood.")
}
}
第二个 case 很可能应该将 msg
与 "stop"
进行比较。
package main
func controllerGood(msg string) {
switch {
case msg == "start":
start()
case msg == "stop":
stop()
default:
panic("Message not understood.")
}
}