Go 变量作用域

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

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

  • 在Go语言中,一对大括号({})表示一个块。
  • 对于在大括号({})内声明的变量,可在相应块的任何地方访问。
  • 大括号内的大括号定义了一个新块——内部块。
  • 在内部块中,可访问外部块中声明的变量。
  • 在外部块中,不能访问在内部块中声明的变量。

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

  • 如下代码显示了大括号定义的程序结构和变量作用域。每对大括号都表示一个块。
  • 代码的缩进程度反映了块作用域的层级。在每个块中,代码都被缩进。
  • 在内部块中,可引用外部块中声明的变量。
 package main

 import (
  "fmt"
 )

 var s = "Hello world"

 func main() {
  fmt.Printf("Print 's' variable from outer block %v\n", s)
  b := true
  if b {
   fmt.Printf("Printing 'b' variable from outer block %v\n", b)
   i := 42
   if b != false {
        fmt.Printf("Printing 'i' variable from outer block %v\n", i)
   }
  }
 }

输出结果:
Go 变量作用域

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

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!