vladimir@Veriton:~$ sudo netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 462/systemd-resolve
tcp 0 0 0.0.0.0:1716 0.0.0.0:* LISTEN 964/kdeconnectd
udp 0 0 0.0.0.0:1716 0.0.0.0:* 964/kdeconnectd
udp 0 0 127.0.0.53:53 0.0.0.0:* 462/systemd-resolve
которая по моему мнению ловит все случаи объявления переменной без инициализации.
Переменная по умолчанию <i>false</i>
... много кода
<b>явная инициализация</b> - установка в <b>true</b>
... много кода
if ,,, {
установка переменной в <i>true/false</i>
}
... много кода
Ваш пример понятен, он соответствует #1: Unintended variable shadowing из книжки про 100 ошибок на Go.
В своём вопросе (и последнем примере) я имел в виду другое: наличие в компиляторе/линтере возможности обнаружения переменной с неявной инициализацией (zero-value), для которой нет явной инициализации (или явная инициализация внутри блока условного оператора).
P.S. Под явной инициализацией я подразумевал:
1. Явное присвоение начального значение переменной в операторе var.
2. Присвоение (=) в коде.
P.P.S. Исходный вопрос (плюсы и минусы концепции zero-value) был в большей степени риторическим.