Go语言生成二维码的示例🚀


关于Go语言生成二维码的示例代码和技巧,咱们用分步拆解的方式讲解,并附上可直接运行的代码片段。以下内容适合需要快速上手的开发者,包含基础用法、自定义样式和实战技巧👇


一、快速入门:生成你的第一个二维码

  1. 安装核心库
    Go语言生成二维码推荐使用 go-qrcode 库,执行以下命令安装:
go get -u github.com/skip2/go-qrcode 
  1. 基础代码(生成URL二维码)
package main 
import "github.com/skip2/go-qrcode"
 
func main() {
    // 生成二维码并保存为PNG文件 
    err := qrcode.WriteFile(
        "https://github.com",    // 二维码内容(支持中文)
        qrcode.Medium,           // 容错级别:Low/Medium/High/Highest 
        256,                     // 图片尺寸(像素)
        "my_qrcode.png",         // 输出文件名 
    )
    if err != nil {
        panic(err)
    }
}

效果说明:

  • 生成一个256x256像素的二维码图片
  • 扫描后会跳转至Git官网
  • 容错级别建议选Medium,平衡尺寸与抗损能力

二、自定义样式:让二维码更个性

  1. 修改颜色(红底白码)
qr, err := qrcode.New("Hello World", qrcode.High)
qr.BackgroundColor = color.RGBA{255, 0, 0, 255} // 红色背景 
qr.ForegroundColor = color.White                // 白色前景 
qr.WriteFile(256, "color_qr.png")
  1. 添加Logo(品牌标识)
package main

import (
	"github.com/nfnt/resize"
	"github.com/skip2/go-qrcode"
	"image"
	"image/draw"
	"image/png"
	"os"
)

func main() {
	// 生成二维码并保存为PNG文件
	logoImg, _ := os.Open("site_logo.png")
	defer logoImg.Close()

	// 将Logo缩放至二维码尺寸的1/4并居中
	logo, _, _ := image.Decode(logoImg)
	logo = resize.Resize(42, 42, logo, resize.Lanczos3)
	qr, err := qrcode.New("Hello World", qrcode.High)
	if err != nil {
		panic(err)
	}
	qrcodeImg := qr.Image(256)
	outImg := image.NewRGBA(qrcodeImg.Bounds())
	draw.Draw(outImg, outImg.Bounds(), qrcodeImg, image.Pt(0, 0), draw.Over)
	offset := image.Pt((outImg.Bounds().Max.X-logo.Bounds().Max.X)/2, (outImg.Bounds().Max.Y-logo.Bounds().Max.Y)/2)
	draw.Draw(outImg, outImg.Bounds().Add(offset), logo, image.Pt(0, 0), draw.Over)
	// 保存带Logo的二维码
	file, _ := os.Create("qr_with_logo.png")
	png.Encode(file, outImg)
}

技巧:Logo建议使用纯色背景,避免干扰扫码识别

三、避坑指南:常见问题解决

  1. 中文乱码问题

    • 确保内容字符串为UTF-8编码
    • 复杂内容建议先进行URL编码
  2. 大尺寸生成缓慢

    • 超过1024像素时,优先提升容错级别而非尺寸
    • 使用go routines并发生成多个二维码
  3. 依赖冲突处理

    • 若同时使用多个图像库,注意image/draw包的导入路径

五、总结
通过go-qrcode库,只需10行代码即可生成专业级二维码。无论是支付码、活动海报还是API接口,Go都能轻松应对。

动手试试吧!遇到问题欢迎留言讨论~ 🚀

wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo