浅谈 Go 语言作用域

浅谈 Go 语言作用域

package main

import "fmt"

var block = "package"

func main() {
  block := "function"

  {
    // := 会声明一个新变量并且将其初始化
    block := "inner"
    fmt.Printf("The block is %s.\n", block)
  }

  fmt.Printf("The block is %s.\n", block)
}

输出

The block is inner.
The block is function.

在这里 block := "inner" 等价于 var block = "inner",它声明了一个新变量并且将其初始化。

{} 这个代码块中新的变量 blockmain 中声明的 block 名称相同。

  • {} 这个代码块中,它的优先级更高。
  • 它的作用范围只在 {} 这个代码块中。
package main

import "fmt"

var block = "package"

func main() {
  block := "function"

  {
    // = 会覆盖 block
    block = "inner"
    fmt.Printf("The block is %s.\n", block)
  }

  fmt.Printf("The block is %s.\n", block)
}

输出

The block is inner.
The block is inner.

这种情况很好理解:在 {} 这个代码块中,使用 = 改变了变量 block 的值。