我知道在 go 中变量是按值传递的。但是,我想在这个函数之外的函数中调用一个变量。让我举个例子:
package main
import (
"fmt"
)
func Smile(){
A := 5
}
func main() {
fmt.Println(A)
}
这给了我未定义的 A。
通过 A 的最佳方法是什么?我应该使用指针吗?我该怎么做?
最佳答案
无法从 main()
打印 Smile()
函数中声明的 A
变量的值。
主要原因是变量A
只有在代码执行进入Smile()
函数时才存在,更准确地说是到达A
变量声明。在您的示例中,这永远不会发生。
即使在其他一些示例中发生这种情况(例如调用 Smile()
),应用程序也可能有多个 goroutine,并且其中多个可能正在执行 Smile()
,导致应用程序具有多个 A
变量,彼此独立。在这种情况下, main()
中的 A
指的是什么?
Go is lexically scoped using blocks.这意味着在 Smile()
中声明的变量 A
只能从 Smile()
访问,main()
函数不能引用它。如果你需要这样的“分享”,你必须在Smile()
之外定义A
。如果 Smile()
和 main()
都需要访问它,则必须将其设为全局变量,或者将其传递给需要它的函数.
让它成为一个全局变量,这就是它的样子:
var a int
func smile() {
a = 5
fmt.Println("a in smile():", a)
}
func main() {
smile()
fmt.Println("a in main():", a)
}
此输出(在 Go Playground 上尝试):
a in smile(): 5
a in main(): 5
在 main()
中将其声明为本地并将其传递给 smile()
,这就是它的样子:
func smile(a int) {
fmt.Println("a in smile():", a)
}
func main() {
a := 5
fmt.Println("a in main():", a)
smile(a)
}
输出(在 Go Playground 上尝试):
a in main(): 5
a in smile(): 5
关于go - 从go中的另一个函数调用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655672/