我知道变量在 go 中是按值传递的。但是,我想在此函数外的 func 内调用一个变量。让我给你举个例子:
package main
import (
"fmt"
)
func Smile(){
A := 5
}
func main() {
fmt.Println(A)
}
Run Code Online (Sandbox Code Playgroud)
这给了我 undefine A。
通过 A 的最佳方法是什么?我应该使用指针吗?我怎么做?
无法从 打印函数中A声明的变量的值。Smile()main()
其主要原因是变量A仅在代码执行进入Smile()函数时才存在,更准确地说是到达A变量声明。在您的示例中,这永远不会发生。
并且即使在其他一些示例中发生这种情况(例如Smile()被调用),一个应用程序可能有多个 goroutine,并且其中多个可能同时执行Smile(),导致应用程序具有多个A变量,彼此独立。在这种情况下,它会A在main()指什么?
Go 使用块进行词法范围。这意味着A内部声明的变量Smile()只能从 访问Smile(),main()函数不能引用它。如果你需要这样的“共享”,你必须A在Smile(). 如果同时Smile()和main()需要访问它,你必须使它为全局变量,或者你必须将它传递给需要它的功能。
使它成为一个全局变量,这就是它的样子:
var a int
func smile() {
a = 5
fmt.Println("a in smile():", a)
}
func main() {
smile()
fmt.Println("a in main():", a)
}
Run Code Online (Sandbox Code Playgroud)
此输出(在Go Playground上尝试):
a in smile(): 5
a in main(): 5
Run Code Online (Sandbox Code Playgroud)
main()将其声明为本地 in并将其传递给smile(),这就是它的样子:
func smile(a int) {
fmt.Println("a in smile():", a)
}
func main() {
a := 5
fmt.Println("a in main():", a)
smile(a)
}
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
a in main(): 5
a in smile(): 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3866 次 |
| 最近记录: |