Short variable declarations rulebook
How to use short variable declarations properly.


👉 You can’t use it to declare package-level variables.
illegal := 42func 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 // <-- errorBecause, := 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 newThis 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 = 34func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}Here,foo := 42is legal, because, it redeclaresfooinsome()func's scope.foo = 314is legal, because, it just reassigns a new value tofoo.
👉 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 hereBecause,if foo := ...assignment, only accessible to thatifclause.


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.