На стр. 248 у Саммерфильда нашёл штуку, которая явно является источником ошибок. С учётом того, что if начинает новую область видимости, такого рода форма if оправдана: if res, err:= func(); err=nil{ res+=1 } Объявление с присвоением в охране -- это норма. А вот то, что переменные в дальнейших ветках "else if" (локальные между прочим) видны до конца if -- это дико! И обратите внимание на то, как в данном случае неудачно использован терминатор ";"! В других языках это бы просто разорвало инструкцию) А если по ошибке вместо ";" поставить "," -- будет ещё веселей)) Всё понимаю, интересное решение, можно наделать прикольных велосипедов, но ведь Go -- для системного программирования, разве нет? Да и сама форма условия с вычислениями в охране -- ну зачем так усложнять? Да, привыкнуть можно, но как-то мне это не по нраву. Чем проще код, тем надёжней.