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

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

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

Начать курс

Библиотека 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

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