Welcome To Golang By Example

Global and Local Constant in Go (Golang)

Table of Contents

Overview

Like any other variable, a constant will be global within a package if it is declared at the top of a file outside the scope of any function. For example, in the below program name will be a global constant available throughout the main package in any function. Do note that the const name will not be available outside the main package. For it to be available outside the main package it has to start with a capital letter. See the below code. It also shows the example of a local constant within a package.

Example

package main

import "fmt"

const name = "test"

func main() {
    const a = 8
    fmt.Println(a)
    testGlobal()
}

func testGlobal() {
    fmt.Println(name)
    //The below line will give compiler error as a is a local constant
    //fmt.Println(a)
}

Output

8
test

Let’s see an example where we try to access the global constant from a different package. Let’s say that

main.go

package main

import (
	"fmt"

	"github.com/learn/data"
)

func main() {
	val := data.PI
	fmt.Println(val)
}

data.go

package data

const PI = 3.142

Go to the learn directory and run command

go run main.go

Output

3.142

In the above program we are trying to access the constant PI which is defined in data.go from the main package. The program works and successfully prints the value as the const PI starts with a capital letter and hence it is visible outside its package.

If you change the constant name from PI to pi then above program will raise compilation error

cannot refer to unexported name data.pi
./main.go:11:7: undefined: data.pi

Let’s see a program for that

main.go

package main

import (
	"fmt"

	"github.com/learn/data"
)

func main() {
	val := data.pi
	fmt.Println(val)
}

data.go

package data

const pi = 3.142

Go to the learn directory and run command

go run main.go

Output

cannot refer to unexported name data.pi
./main.go:11:7: undefined: data.pi