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

相关推荐
WeiXiao_Hyy5 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇11 分钟前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
long31623 分钟前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_1111 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
短剑重铸之日1 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
Dragon Wu2 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
一个有梦有戏的人2 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python
爬山算法3 小时前
Hibernate(88)如何在负载测试中使用Hibernate?
java·后端·hibernate
独断万古他化3 小时前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring
我爱加班、、3 小时前
Websocket能携带token过去后端吗
前端·后端·websocket