首页 > 解决方案 > 为什么 foo := foo() 不会导致错误?

问题描述

我试图理解为什么在 Go 中以下代码不会产生错误。

func main() {
  foo := foo()
  fmt.Println(foo)
}

func foo() int {
  return 1 
}

Foo 已经在全局范围内定义了,为什么我可以重新定义它?

标签: gosyntaxcompiler-errors

解决方案


https://golang.org/ref/spec#Declarations_and_scope

在块中声明的标识符可以在内部块中重新声明。虽然内部声明的标识符在范围内,但它表示由内部声明声明的实体。


推荐阅读