Генератор 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-код оставался читаемым для сканеров.