【问题标题】:Why doesn't foo := foo() result in an error?为什么 foo := foo() 不会导致错误?
【发布时间】:2019-09-19 16:03:02
【问题描述】:
我试图理解为什么在 Go 中以下代码不会产生错误。
func main() {
foo := foo()
fmt.Println(foo)
}
func foo() int {
return 1
}
Foo 已经在全局范围内定义了,为什么我可以重新定义它?
【问题讨论】:
标签:
go
syntax
compiler-errors
【解决方案2】:
可以在内部块中重新声明标识符。如果同一标识符在同一块中声明两次,程序会产生错误。
考虑这个例子来理解范围:
package main
import "fmt"
var v="global"
func main() {
v := v
fmt.Println(v)
//v := v
//Error: Same identifier 'v' declared again
{
v := "inner"
fmt.Println(v)
}
fmt.Println(v)
}
程序的输出:
global
inner
global