Go · Intermediário · Inglês · Técnico
shadowing
Quando uma variável declarada num escopo interno recebe o mesmo nome de outra externa e a esconde. Com := é fácil criar sem querer.
Onde usar
Clássico com err: um 'x, err := f()' dentro de um if cria um novo err e o de fora continua nil. Revisores e o analisador shadow do vet tentam pegar isso.
Em código
var err error
if true {
_, err := os.Open("x") // novo err
_ = err
}
fmt.Println(err) // <nil>Exemplos
That's shadowing, the outer err stays nil.
Isso é shadowing, o err de fora continua nil.
Careful with := inside the if, it shadows the variable.
Cuidado com := dentro do if, ele faz shadowing da variável.
Cuidado
Nem todo shadowing é bug, e 'if v, ok := ...' é comum e seguro; o problema é achar que está atribuindo à variável de fora.
Sinônimos
sombreamento