CodeQL 文档

对局部变量的无用赋值

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

点击查看 CodeQL 代码库中的查询

将值赋给变量,但该值从未被读取,或者其值在被读取之前始终被覆盖。这意味着原始赋值无效,并且可能表示逻辑错误或代码不完整。

建议

删除对立即被覆盖的变量的赋值,或者使用空白标识符 _ 作为从未使用过的返回值的占位符。

示例

在以下示例中,将值赋给 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)
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私