为什么将变量分配给 _ 不会在 go 中抛出已声明但未使用的错误?



我已经声明了一个变量'x',但还没有使用

package main
func main() {
var x int = 10
_ = x
}

在上面的程序中,我将x的值分配给_(空白标识符(。

空白标识符是一个只能写入的变量,不能使用,因此,它就像说这里不使用x一样好。

  1. 但为什么它不抛出错误?x不是在浪费内存吗
  2. 编译器是否应该将x视为已声明但未使用
  3. 这是一个bug还是故意的
  4. 如果是故意的,这背后的原因是什么
  5. go编译器是否会在上面的程序中自动向空闲的x内存添加任何指令
  6. 如果创建了许多这样的变量并将其分配给_,会对性能产生任何影响吗

但为什么它不抛出错误?

因为语言规范说它不应该。

x不是在浪费内存吗?

这是一个实现细节,与语言规范无关。可以合理地假设不会使用内存,因为那里没有变量,但有很多Go实现,每个实现都可以在这方面做出自己的决定。

编译器是否应该将x视为已声明但未使用?

否。

这是一个错误还是故意的?

这是故意的。

如果是故意的,这背后的原因是什么?

除了询问语言作者之外,猜测是唯一的可能性,这在StackOverflow上是偏离主题的。

go编译器是否会自动添加任何指令以释放上述程序中的x内存?

同样,这是一个实现细节,不是由规范定义的,可能会发生更改。

如果创建了许多这样的变量并将其分配给_,会对性能产生任何影响吗?

可能不会。但同样,这是一个实现细节,并且可能因实现而异。

1-它是一个已声明的局部变量,并且已使用。为什么会出现错误?编译器可以选择通过消除它来优化它。

2-x被声明和使用。它的值被读取并丢弃

3/4-像这样使用_赋值毫无意义。它还有其他用途,例如,在range语句中

5-上面,x没有转义到堆,所以它是在堆栈上分配的。没有必要释放它。

相关内容

最新更新