Go语言实战案例 — 工具开发篇:Go 实现二维码生成器

二维码作为信息传递的载体,已经广泛应用在支付、营销、门票、WiFi 分享等场景中。Go 标准库虽然没有直接支持二维码,但通过第三方库我们可以非常方便地实现一个二维码生成器工具

这一篇我们就来带你一步一步完成一个支持文本/URL 转二维码、可自定义大小和输出格式的命令行工具。


功能目标

  • 输入字符串(如 URL、文本),生成对应二维码。
  • 支持输出 PNG 格式图片。
  • 可指定二维码尺寸(默认 256x256)。
  • 支持命令行运行,参数简单易懂。
  • 可扩展:支持 Logo 嵌入、颜色定制。

技术选型

  • 第三方库:

  • 命令行解析:使用 Go 标准库 flag


项目结构

go 复制代码
qrcode-gen/
├── main.go
├── go.mod

完整代码(main.go)

go 复制代码
package main

import (
	"flag"
	"fmt"
	"os"

	"github.com/skip2/go-qrcode"
)

func main() {
	// 命令行参数
	content := flag.String("text", "https://golang.org", "需要生成二维码的内容")
	output := flag.String("out", "qrcode.png", "输出文件路径")
	size := flag.Int("size", 256, "二维码尺寸(像素)")
	flag.Parse()

	if *content == "" {
		fmt.Println("❌ 内容不能为空,请使用 -text 参数指定要生成二维码的内容")
		os.Exit(1)
	}

	// 生成二维码
	err := qrcode.WriteFile(*content, qrcode.Medium, *size, *output)
	if err != nil {
		fmt.Printf("❌ 生成二维码失败: %v\n", err)
		os.Exit(1)
	}

	fmt.Printf("✅ 二维码已生成: %s\n", *output)
}

使用方法

  1. 初始化项目并安装依赖:
bash 复制代码
go mod init qrcode-gen
go get github.com/skip2/go-qrcode
  1. 构建可执行文件:
bash 复制代码
go build -o qrcode-gen main.go
  1. 运行示例:
bash 复制代码
# 生成默认二维码
./qrcode-gen -text "https://github.com" -out github.png

# 指定大小
./qrcode-gen -text "Hello, QR!" -size 512 -out hello.png

运行效果

  • 输入:https://github.com
  • 输出:一张名为 github.png 的二维码,尺寸为 256x256,可以用微信/支付宝扫描。

扩展功能(进阶)

  1. Logo 嵌入:在二维码中间加一个小图标(例如品牌 Logo)。
  2. 颜色定制:支持前景色、背景色自定义。
  3. 批量生成:读取一个 CSV/文本文件,为每一行生成一个二维码。
  4. Web 服务版:提供一个 HTTP API,接收参数并返回二维码图片。

总结

通过 go-qrcode 库,我们几行代码就实现了一个二维码生成器工具:

  • 支持命令行参数
  • 输出 PNG 图片
  • 可指定尺寸
  • 可快速集成到自动化脚本或 Web 服务

相关推荐
笃行3503 小时前
SQLServer数据迁移之后,那张报表还能不能秒出
后端
LucianaiB4 小时前
别再被 AI 骗了:我把腾讯云 4 个 Skill 做成了个「AI 打假侦探」,过程的一个小配置坑惨了我
后端
candyTong4 小时前
Claude Code 如何恢复一段会话
后端·架构·ai编程
En^_^Joy5 小时前
Django项目配置全攻略:settings配置文件
后端·python·django
IT_陈寒8 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
小强库计算机毕业设计8 小时前
SpringBoot+Vue3 学生宿舍管理系统实战
java·spring boot·后端·vue·学生宿舍管理系统
小狼1838 小时前
实践6|SDD 实战:AI 写的规格被推翻了四次
后端·claude
篮框坏了8 小时前
"DeepSeek Harness 实测:一毛钱干三活,但默认配置是个坑"
后端·ai编程
jobBridge218 小时前
大模型到底是怎么"想"的?我把 Transformer 拆开,发现它其实是个"接词狂魔"
人工智能·后端·编程语言
唐青枫9 小时前
看懂内存地址之后,才算真正入门 Zig:指针、切片与实战
后端