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