Библиотека go-qrcode: генерация QR-кодов на Go (Golang)
QR-коды стали неотъемлемой частью современного веба и мобильных приложений. Они используются для быстрого перехода по ссылкам, передачи контактных данных, авторизации и многого другого. Если ваш проект написан на Go (Golang), то одной из лучших библиотек для создания QR-кодов является go-qrcode. В этой статье мы подробно разберём её возможности, установку и примеры использования.
Что такое go-qrcode?
go-qrcode — это чистая реализация генератора QR-кодов на языке Go. Она не имеет внешних зависимостей (кроме стандартной библиотеки) и поддерживает все основные функции: настройку размера, уровня коррекции ошибок, цвета и фона. Библиотека умеет генерировать как PNG-изображения, так и возвращать сырые бинарные данные для дальнейшей обработки.
Установка
Установка библиотеки выполняется стандартной командой go get:
go get github.com/skip2/go-qrcode
После этого вы можете импортировать её в свой проект:
import (
"github.com/skip2/go-qrcode"
)
Основные возможности
- Генерация PNG-изображений — самый популярный случай использования.
- Настройка уровня коррекции ошибок — Low, Medium, High, Highest.
- Изменение размера — от 21x21 до 177x177 модулей.
- Настройка цветов — можно задать цвет переднего плана и фона.
- Поддержка Unicode — можно кодировать любой текст, включая кириллицу.
- Вывод в сырой формат — массив байтов для кастомной обработки.
Примеры кода
1. Простейший QR-код
Сгенерируем QR-код для URL и сохраним его в файл:
package main
import (
"github.com/skip2/go-qrcode"
)
func main() {
err := qrcode.WriteFile("https://pythonlib.ru", qrcode.Medium, 256, "qrcode.png")
if err != nil {
panic(err)
}
}
В этом примере мы используем средний уровень коррекции ошибок (qrcode.Medium) и размер изображения 256x256 пикселей.
2. Настройка цветов
Если вам нужен нестандартный цвет QR-кода, используйте структуру qrcode.Config:
package main
import (
"image/color"
"github.com/skip2/go-qrcode"
)
func main() {
qr, err := qrcode.New("Привет, мир!", qrcode.Highest)
if err != nil {
panic(err)
}
// Настройка цвета
qr.ForegroundColor = color.RGBA{R: 0, G: 150, B: 255, A: 255} // синий
qr.BackgroundColor = color.RGBA{R: 255, G: 255, B: 255, A: 255} // белый
err = qr.WriteFile(256, "custom_qrcode.png")
if err != nil {
panic(err)
}
}
3. Получение PNG в виде байтов
Иногда нужно не сохранять файл, а отдать изображение через HTTP или обработать дальше. Для этого используйте метод PNG():
package main
import (
"fmt"
"github.com/skip2/go-qrcode"
)
func main() {
qr, err := qrcode.New("https://example.com", qrcode.Low)
if err != nil {
panic(err)
}
pngBytes, err := qr.PNG(256)
if err != nil {
panic(err)
}
fmt.Printf("Размер PNG: %d байт\n", len(pngBytes))
// Теперь pngBytes можно отправить в HTTP-ответ или сохранить
}
4. Генерация с минимальным размером
Если вы хотите получить самый маленький возможный QR-код, используйте метод ToQRTerminal() для отладки в терминале, или задайте минимальный размер модуля:
package main
import (
"fmt"
"github.com/skip2/go-qrcode"
)
func main() {
qr, err := qrcode.New("1234567890", qrcode.High)
if err != nil {
panic(err)
}
// Вывод в терминал (для отладки)
fmt.Println(qr.ToSmallString(false))
}
Уровни коррекции ошибок
Библиотека поддерживает четыре стандартных уровня:
qrcode.L