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

标签 go

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

package main

import (

    "fmt"
)

func Smile(){
  A := 5
}

func main() {

   fmt.Println(A)

}

这给了我未定义的 A。

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

最佳答案

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

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

即使在其他一些示例中发生这种情况(例如调用 Smile()),应用程序也可能有多个 goroutine,并且其中多个可能正在执行 Smile() ,导致应用程序具有多个 A 变量,彼此独立。在这种情况下, main() 中的 A 指的是什么?

Go is lexically scoped using blocks.这意味着在 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)
}

此输出(在 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

关于go - 从go中的另一个函数调用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655672/

相关文章:

go-couchbase 客户端更新功能

arrays - 解析显式数组

go - 使用 Go 读取 TOML 文件时结果为空

go - 如何使用 golang 接受付款?

go - 为什么 golang 垃圾收集器不实现分代和紧凑型 gc?

http.Request.Clone() 不是深度克隆?

go - 就地截断 slice

go - 通用 slice 参数和限制为 slice 类型的参数有什么区别?

go - 在 Go 时间模块上苦苦挣扎

go - 从带有函数的 slice 中调用函数并获取返回值