对局部变量的无用赋值¶
ID: go/useless-assignment-to-local
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
- external/cwe/cwe-563
Query suites:
- go-security-and-quality.qls
将值赋给变量,但该值从未被读取,或者其值在被读取之前始终被覆盖。这意味着原始赋值无效,并且可能表示逻辑错误或代码不完整。
建议¶
删除对立即被覆盖的变量的赋值,或者使用空白标识符 _
作为从未使用过的返回值的占位符。
示例¶
在以下示例中,将值赋给 a
,但随后立即被覆盖,将值赋给 b
但从未使用过,最后,将对 fmt.Println
的调用的结果赋给两个临时变量,然后这些变量立即被对 function
的调用覆盖。
package main
import "fmt"
func main() {
a := calculateValue()
a = 2
b := calculateValue()
ignore, ignore1 := fmt.Println(a)
ignore, ignore1, err := function()
if err != nil {
panic(err)
}
fmt.Println(a)
}
从未使用过 calculateValue
的结果,如果 calculateValue
是一个无副作用的函数,则可以删除这些赋值。要忽略 fmt.Println
的所有返回值,可以简单地不将其赋给任何变量。要仅忽略某些返回值,请使用 _
。
package main
import "fmt"
func main() {
a := 2
fmt.Println(a)
_, _, err := function()
if err != nil {
panic(err)
}
fmt.Println(a)
}