Short variable declarations rulebook

How to use short variable declarations properly.

👉 You can’t use it to declare package-level variables.

illegal := 42
func foo() {
legal := 42
}
Because, at package level, every declaration should start with a keyword like var, const, func, type, and import.

👉 You can’t use it twice:

legal := 42
legal := 42 // <-- error
Because, := introduces "a new variable", hence using it twice does not redeclare a second variable, so it's illegal.

👉 You can use them twice in “multi-variable” declarations if one of the variables are new:

foo, bar  := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
This is legal, because, you’re not redeclaring variables, you’re just reassigning new values to the existing variables, with some new variables.

👉 You can use them if a variable already declared with the same name before:

var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Here, foo := 42 is legal, because, it redeclares foo in some() func's scope. foo = 314 is legal, because, it just reassigns a new value to foo.

👉 You can use them for multi-variable declarations and assignments:

foo, bar   := 42, 314
jazz, bazz := 22, 7

👉 You can reuse them in scoped statement contexts like if, for, switch:

foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Because, if foo := ... assignment, only accessible to that if clause.

If you want learn everything about Go variables, be sure to read the following guide with full of tips and tricks:

I’m also creating an online course for Go → Join to my newsletter

“ Let’s stay in touch weekly for new tutorials and tips “


My twitter — @inancgumus — I mostly tweet about Go.