go-qrcode最小可行代码只需两步:导入库后调用qrcode.Encode("https://example.com", qrcode.Medium, 256)生成*image.RGBA,再用png.Encode写入文件;注意路径须英文、父目录需提前创建、中文内容需URL编码,保存时务必检查错误并打印日志。

go-qrcode 生成二维码图片的最小可行代码
直接能跑通的写法就两步:导入库、调用 Encode。别被文档里一堆选项吓住,90% 的需求只需要指定内容和尺寸:
-
qrcode.Encode("https://example.com", qrcode.Medium, 256)返回一个*image.RGBA,不是文件也不是字节流 - 必须手动用
png.Encode写入文件,否则没任何输出 - 尺寸参数是像素值,不是“小/中/大”这种抽象概念;传 128 和 512 生成的图清晰度差异肉眼可见
保存二维码时常见的 invalid argument 错误
这个错误几乎全是路径或文件句柄问题,和二维码逻辑无关:
- 路径含中文或空格?
os.OpenFile("二维码.png", os.O_CREATE|os.O_WRONLY, 0644)在 Windows 下容易崩,建议用英文路径如"qrcode.png" - 忘记创建父目录?
os.MkdirAll("output", 0755)得提前写,不然os.OpenFile("output/q.png", ...)直接报错 - 文件已打开且被占用?比如用看图软件正开着
q.png,Go 写入会失败——关掉再试就行
中文内容生成乱码或方块?不是编码问题,是字体缺失
go-qrcode 本身不处理文字渲染,它只对输入字符串做 Base32 编码后画点阵。所谓“中文乱码”,其实是你把中文当 URL 或纯文本传进去,但扫码器不认:
- 想扫出中文文本?直接传
"你好世界"没问题,主流扫码器都支持 UTF-8 字符串 - 想扫出带中文的 URL?确保 URL 已经用
url.PathEscape或url.QueryEscape编码,比如"https://site.com/?q=" + url.QueryEscape("测试") - 生成图上有中文注释?那是另外加的水印,
go-qrcode不负责这事,别往它头上甩锅
生成速度慢、内存暴涨?检查 error 处理和 image 复用
高频生成(比如 Web 接口每秒几十次)时,两个地方最容易翻车:
立即学习“go语言免费学习笔记(深入)”;
- 没检查
qrcode.Encode的返回 error?传了超长字符串(>1KB)或非法级别(比如qrcode.Quartile是错的,正确是qrcode.Quartile不存在,应为qrcode.High)会导致 panic - 反复调用
qrcode.Encode但没复用*image.RGBA?其实没必要,但如果你在循环里生成大量图,记得及时runtime.GC()并避免闭包捕获大对象 - 用
qrcode.WithTransparentBackground(true)?这个选项会显著拖慢生成速度,且 PNG 透明通道在部分扫码器上识别率下降,非必要不用
log.Printf("saved to: %s", path) 能省半小时排查。










