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

相关推荐
绝无仅有2 小时前
面试经验之MySQL 锁与索引实战总结分享
后端·面试·github
程序员码歌9 小时前
明年35岁了,如何破局?说说心里话
android·前端·后端
橙*^O^*安9 小时前
Go 语言基础:变量与常量
运维·开发语言·后端·golang·kubernetes
工程师小星星9 小时前
Golang语言的文件组织方式
开发语言·后端·golang
哈喽姥爷10 小时前
Spring Boot---自动配置原理和自定义Starter
java·spring boot·后端·自定义starter·自动配置原理
舒一笑12 小时前
为什么where=Version就是乐观锁了?
后端·mysql·程序员
GoGeekBaird12 小时前
关于垂类AI应用落地行业的方法论思考
后端·github·agent
小宁爱Python12 小时前
Django 基础入门:命令、结构与核心配置全解析
后端·python·django
你的人类朋友13 小时前
认识一下Bcrypt哈希算法
后端·安全·程序员