Можно ли считать это «говнокодом»?
1) дублирование
2) разделить функцию на функции поменьше, что бы убрать вложенность ифов
3) пусть функция возвращает строки, и какая-то другая уже выводит это в stdout, что бы у вас это происходило все в одно месте.
На сколько я понимаю назначение функции isLoginAvailable определить наличии логина в базе. В таком случае лучше писать rows, err := DB.Query("SELECT EXISTS (SELECT id FROM users WHERE login=?)", login)
Вернет 1 если логин уже есть, 0 -- если нету.
Оттуда же: если возникает ошибка при запросе, то ты говоришь пользователю что логин не валидный. Как то это не правильно, ошибка это ошибка, к валидности отношения не имеет.if result == true { 
    return isLoginAvailable(login) 
} else { 
    return false 
}
Можно просто return result && isLoginAvailable(login)