我有一个main.go文件,其中包含:
// running the router in port 9000
func main() {
router,Global := routers.InitApp()
fmt.println(Global)
router.RunTLS(":9000" , "domain.crt" , "domain.key")
}
Run Code Online (Sandbox Code Playgroud)
在router.InitMap中我想声明一个全局变量,可以在我的应用程序的任何地方访问它.有可能吗?我试过了
func InitApp() (*gin.Engine,string) {
var Global= "myvalue"
router := gin.New()
return router,Global
}
Run Code Online (Sandbox Code Playgroud)
但router.InitMap即使在同一个包中,我也可以访问该变量.
dmi*_*ris 25
在顶层声明一个变量 - 在任何函数之外:
var Global = "myvalue"
func InitApp() (string) {
var Global= "myvalue"
return Global
}
Run Code Online (Sandbox Code Playgroud)
由于变量的名称以大写字母开头,变量将可无论是在通过它的名字当前包-在任何其他包,当您导入程序包中定义的变量,并与包名限定它为:return packagename.Global.
这是另一个例子(也在Go游乐场:https://play.golang.org/p/h2iVjM6Fpk):
package main
import (
"fmt"
)
var greeting = "Hello, world!"
func main() {
fmt.Println(greeting)
}
Run Code Online (Sandbox Code Playgroud)
另见Go Tour:"Variables" https://tour.golang.org/basics/8和"Exported names" https://tour.golang.org/basics/3.
最好使用 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"
}
Run Code Online (Sandbox Code Playgroud)