Go – How to have a global variable accessible across all packages

go

I have a main.go file which has:

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

In router.InitMap I want to declare a global variable which can be accessed throughout my application anywhere. Is is possible? I tried:

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


}

But I can't access the variable Global even in the same package.

Best Answer

declare a variable at the top level - outside of any functions:

var Global = "myvalue"

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

}

Since the name of the variable starts with an uppercase letter, the variable will be available both in the current package through its name - and in any other package when you import the package defining the variable and qualify it with the package name as in: return packagename.Global.

Here's another illustration (also in the Go playground: https://play.golang.org/p/h2iVjM6Fpk):

package main

import (
    "fmt"
)

var greeting = "Hello, world!"

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

See also Go Tour: "Variables" https://tour.golang.org/basics/8 and "Exported names" https://tour.golang.org/basics/3.

Related Topic