Вы должны иметь exists
того же типа или совместимого типа, с типом значения, которое вы извлекаете из базы данных.
Поскольку вы выбираете столбец id
,Я буду считать, что это integer
, и поэтому вы должны объявить о существовании следующим образом var exists int
.Однако, если вы хотите выяснить, присутствует ли строка в таблице или нет, вы обычно используете запрос вида:
SELECT EXISTS(SELECT 1 FROM source WHERE mgmt= $1)
(по крайней мере, в postgres, я не уверен, чтоиспользуемую вами базу данных)
EXISTS
:
Аргумент EXISTS - это произвольный оператор SELECT или подзапрос.Подзапрос оценивается, чтобы определить, возвращает ли он какие-либо строки.Если он возвращает хотя бы одну строку, результат EXISTS равен «true»;если подзапрос не возвращает строк, результатом EXISTS будет «false».
Тогда ваш код Go будет выглядеть примерно так:
query := `SELECT EXISTS(SELECT 1 FROM source WHERE mgmt = $1)`
var exists bool
if err := dr.db.QueryRow(query, mgmt).Scan(&exists); err != nil {
return err
}
if exists {
// already taken
} else {
// unique
}
Также обратите внимание, что с EXISTS
всегда возвращает логическое значение, вам не нужно сравнивать ошибку с sql.ErrNoRows
, если вы получите ошибку, она не будет такой.