Никогда не подставлять пользовательский ввод в строку запроса. Использовать плейсхолдеры: db.QueryContext(ctx, "SELECT * FROM users WHERE id = $1", id). Параметры передавать как аргументы Exec/Query; драйвер экранирует. Проверять и валидировать типы (например, id - целое). ORM и query builder с параметризацией тоже защищают при правильном использовании.
// плохо: "SELECT * FROM users WHERE id = " + id
// хорошо:
db.QueryRowContext(ctx, "SELECT * FROM users WHERE id = $1", id)