Or only allow shadowing for `var` and forbid it for `:=`[0]. Though forbidding it entirely would work just as well.
[0] and go is actually weirder than that — and the opposite way 'round — as `var` doesn't allow any shadowing in the same scope:
var a, b int
var a, c int // fails because it redeclares a in the same block
while `:=` allows same-scope shadowing as long as the overlap is not complete: a, b := foo()
a, b := foo() // fails because no new variable on the left side
a, c := foo() // succeeds
both allow arbitrary shadowing in sub-scopes.