为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
12345678_0001 2023-06-05 18:26:44
我知道变量是按值传递的。但是,我想在这个函数之外的函数中调用一个变量。让我举一个例子:package mainimport (    "fmt")func Smile(){  A := 5}func main() {   fmt.Println(A)}这给了我未定义的A。通过 A 的最佳方法是什么?我应该使用指针吗?我怎么做?
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

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

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

即使在其他一些示例中发生这种情况(例如Smile()被调用),应用程序也可能有多个 goroutine,并且其中多个 goroutine 可能Smile()同时执行,导致应用程序具有多个A变量,彼此独立。在这种情况下,which would Ain main()refer?

Go 使用块在词法范围内。A这意味着内部声明的变量Smile()只能从 访问Smile()main()函数不能引用它。如果你需要这样的“共享”,你必须ASmile(). 如果两者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


查看完整回答
反对 回复 2023-06-05
?
Helenr

TA贡献1780条经验 获得超3个赞

最好的方法是,

指针

前任:

func getCar() {

   car := Vehicles.Car{}

   setModel(&car)

   // model ("BMW") will be available here

}


func setModel(car *Vehicles.Car) {

   car.Model = "BMW"

}


查看完整回答
反对 回复 2023-06-05
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信