Генератор QR-кодов на Go (Golang) с библиотекой go-qrcode

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генератор QR-кодов на Go (Golang): библиотека go-qrcode

QR-коды стали неотъемлемой частью современного веба — от ссылок на сайты до передачи контактных данных. Если вы разрабатываете на Go (Golang) и хотите встроить генерацию QR-кодов в своё приложение, библиотека go-qrcode — идеальное решение. Она легковесна, полностью написана на Go без внешних зависимостей и поддерживает все основные версии QR-кодов.

Установка и настройка

Для начала работы установите пакет через стандартный менеджер модулей Go:

go get github.com/skip2/go-qrcode

Библиотека не требует дополнительных системных библиотек — всё работает из коробки. Поддерживается Go версии 1.13 и выше.

Базовое использование: создаём первый QR-код

Самый простой способ сгенерировать QR-код — использовать функцию WriteFile. Она создаёт PNG-изображение прямо на диск:

package main

import (
    "github.com/skip2/go-qrcode"
)

func main() {
    err := qrcode.WriteFile("https://pythonlib.ru", qrcode.Medium, 256, "qr.png")
    if err != nil {
        panic(err)
    }
}

В этом примере мы создаём QR-код для URL https://pythonlib.ru с уровнем коррекции ошибок Medium и размером 256x256 пикселей. Результат сохраняется в файл qr.png.

Параметры генерации

Функция WriteFile принимает четыре аргумента:

  • content (string) — данные для кодирования (текст, URL, номер телефона и т.д.)
  • level (RecoveryLevel) — уровень коррекции ошибок. Доступные значения:
    • qrcode.Low — 7% восстановления
    • qrcode.Medium — 15% восстановления
    • qrcode.High — 25% восстановления
    • qrcode.Highest — 30% восстановления
  • size (int) — размер изображения в пикселях (обычно от 128 до 1024)
  • filename (string) — путь к выходному файлу (расширение .png обязательно)

Генерация QR-кода в памяти (без сохранения на диск)

Если вам нужно получить QR-код как PNG-байты (например, для отправки через HTTP или сохранения в базу данных), используйте метод PNG:

package main

import (
    "bytes"
    "image/png"
    "log"
    "github.com/skip2/go-qrcode"
)

func main() {
    // Создаём QR-код
    qr, err := qrcode.New("https://pythonlib.ru", qrcode.Medium)
    if err != nil {
        log.Fatal(err)
    }

    // Получаем изображение как *image.RGBA
    img := qr.Image(256)

    // Кодируем в PNG и получаем байты
    var buf bytes.Buffer
    err = png.Encode(&buf, img)
    if err != nil {
        log.Fatal(err)
    }

    // Теперь buf.Bytes() содержит PNG-данные
    log.Printf("QR-код сгенерирован, размер: %d байт", buf.Len())
}

Этот подход удобен для веб-серверов: вы можете отдавать QR-код напрямую в HTTP-ответе, не создавая временных файлов.

Настройка цветов и фона

По умолчанию QR-код чёрно-белый, но библиотека позволяет менять цвета. Используйте метод ForegroundColor и BackgroundColor:

package main

import (
    "image/color"
    "log"
    "github.com/skip2/go-qrcode"
)

func main() {
    qr, err := qrcode.New("https://pythonlib.ru", qrcode.High)
    if err != nil {
        log.Fatal(err)
    }

    // Устанавливаем синий цвет для модулей и белый для фона
    qr.ForegroundColor = color.RGBA{0, 0, 255, 255} // синий
    qr.BackgroundColor = color.RGBA{255, 255, 255, 255} // белый

    // Сохраняем с новыми цветами
    err = qr.WriteFile(256, "colorful_qr.png")
    if err != nil {
        log.Fatal(err)
    }
}

Обратите внимание: цвет фона должен быть светлым, а модулей — тёмным, чтобы QR-код оставался читаемым для сканеров.

О

Рекомендаций