从go中的另一个函数调用变量

我知道变量是按值传递的。但是,我想在这个函数之外的函数中调用一个变量。让我举一个例子:


package main


import (


    "fmt"

)


func Smile(){

  A := 5

}


func main() {


   fmt.Println(A)


}

这给了我未定义的A。


通过 A 的最佳方法是什么?我应该使用指针吗?我怎么做?


12345678_0001
浏览 108回答 2
2回答

倚天杖

无法打印函数A中声明的变量值Smile()from main()。主要原因是变量A只有在代码执行进入函数时才存在Smile(),更准确地说是到达A变量声明。在您的示例中,这永远不会发生。即使在其他一些示例中发生这种情况(例如Smile()被调用),应用程序也可能有多个 goroutine,并且其中多个 goroutine 可能Smile()同时执行,导致应用程序具有多个A变量,彼此独立。在这种情况下,which would Ain main()refer?Go 使用块在词法范围内。A这意味着内部声明的变量Smile()只能从 访问Smile(),main()函数不能引用它。如果你需要这样的“共享”,你必须A在Smile(). 如果两者Smile()都main()需要访问它,则必须将其设为全局变量,或者必须将其传递给需要它的函数。使它成为一个全局变量,这就是它的样子:var a intfunc smile() {    a = 5    fmt.Println("a in smile():", a)}func main() {    smile()    fmt.Println("a in main():", a)}此输出(在Go Playground上尝试):a in smile(): 5a 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(): 5a in smile(): 5

Helenr

最好的方法是,指针前任:func getCar() {   car := Vehicles.Car{}   setModel(&car)   // model ("BMW") will be available here}func setModel(car *Vehicles.Car) {   car.Model = "BMW"}
打开App,查看更多内容
随时随地看视频慕课网APP