Skip to main content

Declaring variables in Go

There are three ways to declare variables in Go: var, :=, and const.

The var keyword is the standard method for declaring a variable. It can be used anywhere in your program, with a value or without:

var s1 string = "Hello"

func main() {
	var s2 = "World"
	var s3 string
	s3 += "!"

Variable declarations without a value require a type (s3 above), but types are otherwise optional.

Declare a variable with with var when you need a variable at the top-level of your program or want to initialize it with no value.

The short-declaration operator, :=, works like the var keyword for declaring variables with three differences: a) it can only be used within the scope of a function, b) it cannot initialize an empty variable, and c) it does not accept a type. Of the var examples above, only one could be replaced with a :=:

// s1 := "Hello" // Outside of function scope

func main() {
	s2 := "World"
	// s3 := // No empty variables

These may sounds like significant limitations, but most of your program will be written inside a function’s scope and rarely do variables need to be declared without a value. So the benefit of using := comes from letting Go infer the type of your variable so that you can focus on the code.

Declare a variable with := when you are working within a function with initial values.

The const keyword tells the compiler that the variable is a constant — it will not be changed or reassigned. Like var it can be used anywhere in your program but can only be used with some types: boolean, float64, int, and string.

const PI float64 = 3.14159

If you try to use const with other types like a slice, then you will get a compiler error: (value of type []string) is not constant compiler(InvalidConstInit)

Declare a variable with const when you know that it will not change throughout your program.

I am new to learning and writing in Go, but in practice I almost exclusively use the declaration operator, :=, for declaring variables. But it’s useful to know the reasons when and why you should reach for var or const.