Short variable declaration rules

inancgumus profile image Inanc Gumus ・2 min read

This is a spin-off post from my main post of Visual how to guide to Go variables, go check it out.

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

illegal := 42
func foo() {
  legal := 42

👉 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.

❤️ Share this on twitter. Please share the love.
🐦 I’m mostly tweeting about Go, you can follow me on twitter: @inancgumus .
🔥 I’m also creating an online course to teach Go. Join to my newsletter!
You will receive notifications about my new posts and upcoming online Go course (every Wednesday).

Originally published on Go Short Variable Declaration Rules in Learn Go Programming.


Editor guide