对字段的无用赋值¶
ID: go/useless-assignment-to-field
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- maintainability
- external/cwe/cwe-563
Query suites:
- go-security-and-quality.qls
将值赋给某个字段,但从未读取过该字段的值。这意味着赋值无效,并且可能表示逻辑错误或代码不完整。
建议¶
仔细检查赋值,以确定它是冗余的,还是其他错误的征兆。
示例¶
以下示例显示了一个简单的 struct
类型,它包装了一个整数计数器,并带有一个将计数器设置为零的 reset
方法。
package main
type counter struct {
val int
}
func (c counter) reset() {
c.val = 0
}
但是,reset
的接收器变量的声明类型为 counter
,而不是 *counter
,因此接收器值是按值传递给方法的,而不是按引用传递。因此,该方法实际上并没有像预期的那样改变其接收器。
要解决此问题,请将接收器变量的类型更改为 *counter
。
package main
func (c *counter) resetGood() {
c.val = 0
}
参考文献¶
Go 常见问题解答:我应该在值还是指针上定义方法?
Go 编程语言规范:方法声明。
常见弱点枚举:CWE-563。