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

从go中的另一个函数调用变量,go,Go,我知道变量在go中是通过值传递的。但是,我想调用一个变量,该变量在func内部,在该函数外部。让我举个例子: package main import ( "fmt" ) func Smile(){ A := 5 } func main() { fmt.Println(A) } 这给了我一个不明确的答案 通过考试的最佳方式是什么?我应该使用指针吗?怎么做?无法从main()打印Smile()函数中声明的A变量的值 主要原因是变量A只有在代码执行进入Smile()函数

我知道变量在go中是通过值传递的。但是,我想调用一个变量,该变量在func内部,在该函数外部。让我举个例子:

package main

import (

    "fmt"
)

func Smile(){
  A := 5
}

func main() {

   fmt.Println(A)

}
这给了我一个不明确的答案


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

无法从
main()
打印
Smile()
函数中声明的
A
变量的值

主要原因是变量
A
只有在代码执行进入
Smile()
函数时才存在,更准确地说是到达
A
变量声明。在您的示例中,这种情况从未发生过

即使在某些其他示例中发生这种情况(例如调用了
Smile()
),应用程序也可能有多个goroutine,其中多个goroutine可能同时执行
Smile()
,从而导致应用程序具有多个彼此独立的
A
变量。在这种情况下,
main()
中的
A
是指哪个

这意味着在
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)
}
func smile(a int) {
    fmt.Println("a in smile():", a)
}

func main() {
    a := 5
    fmt.Println("a in main():", a)
    smile(a)
}
这将输出(在上尝试):

main()
中将其声明为本地,并将其传递给
smile()
,如下所示:

var a int

func smile() {
    a = 5
    fmt.Println("a in smile():", a)
}

func main() {
    smile()
    fmt.Println("a in main():", a)
}
func smile(a int) {
    fmt.Println("a in smile():", a)
}

func main() {
    a := 5
    fmt.Println("a in main():", a)
    smile(a)
}
输出(在上尝试):

最好的办法是,

指针

例:


谢谢我问这个问题的原因是因为我想从函数中的API定义变量,并将这些变量传递给其他函数。你回答了我的问题。你已经看过了吗?你根本不调用变量。
func getData() {
   primaryData := Primary.PrimaryData{}
   getAirTemperatureData(&primaryData)
   // value will be available here
}

func getPrimaryData(primaryData *Primary.PrimaryData) {
   primaryData.DataOne = "Value"
}