我已经声明了一个变量'x',但还没有使用。
package main
func main() {
var x int = 10
_ = x
}
在上面的程序中,我将x
的值分配给_
(空白标识符(。
空白标识符是一个只能写入的变量,不能使用,因此,它就像说这里不使用x
一样好。
- 但为什么它不抛出错误?
x
不是在浪费内存吗 - 编译器是否应该将
x
视为已声明但未使用 - 这是一个bug还是故意的
- 如果是故意的,这背后的原因是什么
- go编译器是否会在上面的程序中自动向空闲的
x
内存添加任何指令 - 如果创建了许多这样的变量并将其分配给
_
,会对性能产生任何影响吗
但为什么它不抛出错误?
因为语言规范说它不应该。
x不是在浪费内存吗?
这是一个实现细节,与语言规范无关。可以合理地假设不会使用内存,因为那里没有变量,但有很多Go实现,每个实现都可以在这方面做出自己的决定。
编译器是否应该将x视为已声明但未使用?
否。
这是一个错误还是故意的?
这是故意的。
如果是故意的,这背后的原因是什么?
除了询问语言作者之外,猜测是唯一的可能性,这在StackOverflow上是偏离主题的。
go编译器是否会自动添加任何指令以释放上述程序中的x内存?
同样,这是一个实现细节,不是由规范定义的,可能会发生更改。
如果创建了许多这样的变量并将其分配给_,会对性能产生任何影响吗?
可能不会。但同样,这是一个实现细节,并且可能因实现而异。
1-它是一个已声明的局部变量,并且已使用。为什么会出现错误?编译器可以选择通过消除它来优化它。
2-x
被声明和使用。它的值被读取并丢弃
3/4-像这样使用_
赋值毫无意义。它还有其他用途,例如,在range
语句中
5-上面,x
没有转义到堆,所以它是在堆栈上分配的。没有必要释放它。