我正在阅读Go语言规范以学习该语言,并从以下
从这个理解来看,
如果我理解正确,那么
声明和作用域
规范中摘录了这些要点。
尽管我能够理解1-4点,但我对第5点和第6点感到困惑:
以下是我用于了解Go语言作用域的代码:
- 在函数内部声明的常量或变量标识符的作用域始于 ConstSpec 或 VarSpec(短变量声明的ShortVarDecl) 的末尾,并在最内层包含块的末尾结束。
- 在函数内部声明的类型标识符的作用域始于 TypeSpec 中的标识符并在最内层包含块的末尾结束。
package main
import "fmt"
func main() {
x := 42
fmt.Println(x)
{
fmt.Println(x)
y := "The test message"
fmt.Println(y)
}
// fmt.Println(y) // outside scope of y
}
从这个理解来看,
x的范围
在main函数
内部,而y的范围
在fmt.Println(x)
之后的大括号内部,在闭合括号外无法使用y
。如果我理解正确,那么
4和5点
都是在说同样的事情。所以我的问题是:
如果它们是在说同样的事情,两点之间的
重要性
是什么?如果它们不同,可以告诉我它们之间的
差异
吗?