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 服务

相关推荐
wo_jack3 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农4 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端
GISer_Jing5 小时前
如何学习Agent
后端·langchain
JWASX6 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析
量化分析码农7 小时前
【Python量化波动率实战 01】波动率是怎么算的:年化、滚动与区间估计一次讲清
后端
特立独行的猫A7 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
金銀銅鐵7 小时前
从一个类名到一张类图:用反射自动生成 PlantUML
java·后端·uml
追逐时光者8 小时前
一款基于 .NET 开源、免费的数据库自治诊断平台
后端·.net
追逐时光者8 小时前
让 GitHub Copilot 更懂你的 .NET 代码风格:一份精简实用的 Copilot Instructions
后端·.net
小满zs9 小时前
Go语言第十八章(架构设计)
后端·go