Go 变量作用域,术语作用域指的是变量在什么地方可以使用,而不是变量是在什么地方声明的。Go语言使用基于块的词法作用域。乍一看,术语词法作用域令人望而生畏,但您必须掌握其中的原理。词法是一个形容词,意思与语言的词汇表相关。这意味着Go定义了变量在什么地方可以引用,在什么地方无法引用。对编程来说,这很有必要,因为这样可根据引用变量的位置,确定引用的是哪个变量。在Go语言中,块是位于一对大括号内的一系列声明和语句,但可以是空的。

可使用通俗的语言前述概念做如下诠释。

对于在大括号({})内声明的变量,可在相应块的任何地方访问。

大括号内的大括号定义了一个新块——内部块。

在内部块中,可访问外部块中声明的变量。

在外部块中,不能访问在内部块中声明的变量。

简而言之,每个内部块都可访问其外部块,但外部块不能访问内部块。

如下代码显示了大括号定义的程序结构和变量作用域。每对大括号都表示一个块。

代码的缩进程度反映了块作用域的层级。在每个块中,代码都被缩进。

在内部块中,可引用外部块中声明的变量。

请注意,变量s不是在大括号内声明的,但可在内部块中访问它。这是因为Go语言将文件也视为块,所以在第一级大括号外声明的变量可在所有块中访问。