我试图理解为什么在Go中以下代码不会产生错误。
func main() {
foo := foo()
fmt.Println(foo)
}
func foo() int {
return 1
}
Foo已在全局范围内定义,为什么我可以重新定义它?
答案 0 :(得分:3)
https://golang.org/ref/spec#Declarations_and_scope
在块中声明的标识符可以在内部声明 块。虽然内部声明的标识符在范围内, 表示内部声明所声明的实体。
答案 1 :(得分:0)
可以在内部块中重新声明标识符。如果在同一块中两次声明相同的标识符,则程序会产生错误。
请考虑以下示例以了解范围:
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