Prepared statement - запрос разобран один раз, параметры подставляются безопасно. Защита от SQL-инъекций и переиспользование плана. В Go: db.PrepareContext(ctx, "SELECT ... WHERE id = $1"), затем stmt.QueryContext или ExecContext с аргументами. sql.DB по умолчанию кеширует подготовленные запросы. Не подставлять пользовательский ввод в строку запроса - только через аргументы.
stmt, err := db.PrepareContext(ctx, "SELECT name FROM users WHERE id = $1")
defer stmt.Close()
var name string
err = stmt.QueryRowContext(ctx, id).Scan(&name)