如何在所有包中访问全局变量

新手上路,请多包涵

我有一个 main.go 文件,其中包含:

 // running the router in port 9000
func main() {
    router,Global := routers.InitApp()
    fmt.println(Global)
    router.RunTLS(":9000" , "domain.crt" , "domain.key")
}

router.InitMap 我想声明一个全局变量,它可以在我的应用程序的任何地方访问。有可能吗?我试过了:

 func InitApp() (*gin.Engine,string) {
        var Global= "myvalue"
        router := gin.New()
        return router,Global

}

但我无法访问变量 Global 即使在同一个包中。

原文由 codec 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

在顶层声明一个变量——在任何函数之外:

 var Global = "myvalue"

func InitApp() (string) {
        var Global= "myvalue"
        return Global

}

由于变量的名称以大写字母开头,因此变量将通过其名称在当前包中可用 - 以及在导入定义变量的包并使用包名称限定它时在任何其他包中可用,如下所示: return packagename.Global

这是另一个例子(也在 Go playground 中:https: //play.golang.org/p/h2iVjM6Fpk ):

 package main

import (
    "fmt"
)

var greeting = "Hello, world!"

func main() {
    fmt.Println(greeting)
}

另请参阅 Go Tour:“变量” https://tour.golang.org/basics/8 和“导出的名称” https://tour.golang.org/basics/3

原文由 dmitris 发布,翻译遵循 CC BY-SA 3.0 许可协议

最好使用 init 函数来初始化全局变量。即使在这个包的多个包含中,它也只会被处理一次。 https://play.golang.org/p/0PJuXvWRoSr

 package main

import (
        "fmt"
)

var Global string

func init() {
        Global = InitApp()
}

func main() {
    fmt.Println(Global)
}

func InitApp() (string) {
        return "myvalue"
}

原文由 Roman Shishkin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题