LearnThatStack Ace your next interview
Golang · question
Question 3 of 68

What is the difference between var and := in Go?

beginner
← All Golang questions
Re-explain
Visual ↓

var is the full declaration and works at package level and inside functions, while :=, the short variable declaration, works only inside functions. With var you can name the type and skip the value, and the variable then holds its zero value. := always needs a value and infers the type from it. At package level you must use var.

Inside a function, := can also redeclare a variable, as long as at least one name on its left is new. Redeclaring assigns to the existing variable. That is why val, err := f() can appear after err already exists.

One trap is := inside an inner block, which creates a new variable that shadows the outer one instead of assigning to it.

// Package level - must use var
var globalVar string

func main() {
    // Both are valid inside functions
    var localVar string    // Zero value: ""
    shortVar := "hello"    // Type inferred as string
    fmt.Println(globalVar, localVar, shortVar)
}
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

The diagram below the answer is the concept . Jump to it ↓

Tailored explanation · switch back to · ·
What should the new diagram focus on?
See it - interactive diagram
When := reuses err and when it shadows it
func main() {
err := setup()
val, err := parse()
if val > 0 {
err := save(val)
fmt.Println(err)
}
fmt.Println(err)
}
Outer blockmain's function body
err (outer)nil
Inner blockgone after the closing brace
empty
Console
1step

The short declaration := creates a new variable named err in main's block. setup succeeds, so err holds nil, which means no error.

1 / 6

In the same block, := reuses err when another name on the left, like val, is new. In an inner block, := makes a new err that hides the outer one, so the save error never reaches the outer err.

© LearnThatStack - diagrams may not be republished without permission.

Other questions have diagrams like this too. Sign in to ask for one where it's missing - it's free.

Create a free account
How well did you know this?
AI:

Saved in this browser - sign in to keep your review list.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Interview lens

Likely follow-ups, what you can say, and the weak answers to avoid.

Sign in free to open it Free account - the lens opens as soon as you're back.

Want a quick review of the fundamentals? See the Golang cheatsheet.

← Back to all Golang questions
Pro · $10/mo

58 of 68 Golang answers are in Pro.

Full answers, code samples, and AI explanations that go simpler or deeper. Cancel anytime.

  • Full answers + code
  • AI explanations, simpler or deeper
  • 1,000 AI credits / month
  • Cancel anytime