引用常量或包级变量而不是函数级变量
Refer to constant or package level variable instead of function level variable
package main
import "fmt"
const name = "Yosua"
// or var name string = "James"
func main() {
name := "Jobs"
fmt.Println(name)
}
如何引用常量而不是函数级变量?
你不能。当局部变量 name
在范围内时,名称 name
表示局部变量。并且没有"qualifier"引用顶级标识符。
An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
如果您需要同时访问顶层constant/variable和局部变量,请使用不同的名称。
如果由于某种原因你不能或不想,你可以先保存顶层常量或变量的值:
cname := name
name := "Jobs"
fmt.Println(name)
fmt.Println(cname)
或者您可以提供其他访问方式,例如一个函数:
func getName() string {
return name
}
name := "Jobs"
fmt.Println(name)
fmt.Println(getName())
两种情况下的输出(在 Go Playground 上尝试):
Jobs
Yosua
package main
import "fmt"
const name = "Yosua"
// or var name string = "James"
func main() {
name := "Jobs"
fmt.Println(name)
}
如何引用常量而不是函数级变量?
你不能。当局部变量 name
在范围内时,名称 name
表示局部变量。并且没有"qualifier"引用顶级标识符。
An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
如果您需要同时访问顶层constant/variable和局部变量,请使用不同的名称。
如果由于某种原因你不能或不想,你可以先保存顶层常量或变量的值:
cname := name
name := "Jobs"
fmt.Println(name)
fmt.Println(cname)
或者您可以提供其他访问方式,例如一个函数:
func getName() string {
return name
}
name := "Jobs"
fmt.Println(name)
fmt.Println(getName())
两种情况下的输出(在 Go Playground 上尝试):
Jobs
Yosua