На сколько я понимаю назначение функции 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)