无法打印函数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
最好的方法是,指针前任:func getCar() { car := Vehicles.Car{} setModel(&car) // model ("BMW") will be available here}func setModel(car *Vehicles.Car) { car.Model = "BMW"}