如何跨所有包一个全局变量访问在golang
问题描述:
我有具有main.go文件:如何跨所有包一个全局变量访问在golang
// 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
。
答
在顶层声明变量 - 的任何功能以外:
var Global = "myvalue"
func InitApp() (string) {
var Global= "myvalue"
return Global
}
由于变量的名称以大写字母开头,变量将在当前包既可以通过其名称 - 以及在导入定义变量的包时使用包名进行限定的任何其他包中,如:return packagename.Global
。
这里的另一个例证(也转到操场:https://play.golang.org/p/h2iVjM6Fpk):
package main
import (
"fmt"
)
var greeting = "Hello, world!"
func main() {
fmt.Println(greeting)
}
参见围棋之旅: “变量” https://tour.golang.org/basics/8和 “导出名称” https://tour.golang.org/basics/3。
你为什么想这么做?你将很难测试的东西。 – ale64bit
我想在应用程序启动时为应用程序获取配置数据。这是通过一个rest API返回的。例如:数据库主机名,用户名等。 – aaj
然后首先在函数'InitApp'之外声明变量:'var Global string',然后在准备就绪时为其分配一个值。 – ale64bit