:= creates the variables on its left hand side which do not exist in the current scope. The current scope for this line is the init() function. Since there is no previous declaration of Db in init() (the current scope) Db is created by := (along with err).
Using = instead requires declaring err first (otherwise there would be an undeclared variable). Go can then find the global Db by first looking the in the current scope, init(), not finding Db and then looking in the current scope’s parent, the global scope, where Db is declared.
Shadowing is when a variable in the current scope masks/blocks/prevents access to a variable with the same name in a parent scope.