最近在使用 Go 开发一个新闻发布的模块,但是我为了急于看到界面效果,不想先实现后台录入功能, 想先自动创建一批测试数据,直接看 UI 效果。于是找了一个自动生成测试数据的库。 go-faker
https://github.com/go-faker/faker
非常适合网站的新闻模块或者博客模块,需要批量创建几百条测试数据的场景。也支持姓名,邮箱,手机号,IP 地址之类的数据类型。之前还专门写过一个小程序来生成测试数据,参考:随机生成身份证号,手机号,邮箱地址的微信小程序。 印象中 PHP Laravel 框架本身就内置了这个功能,但是 golang gin 还是太简陋了,需要自己动手实现。
测试一下
import (
"github.com/go-faker/faker/v4"
)
type Article struct {
ID uint
Title string `faker:"sentence"`
Content string `faker:"paragraph"`
Slug string
}
// 生成 1000 条测试数据
func GenerateFakerArticles() {
for i := 0; i < 1000; i++ {
item := Article{}
faker.FakeData(&item)
// 保存到数据库或其他操作
item.Slug = utils.Slugify(item.Title)
DB.Create(&item)
}
}
看一下生成数据的效果:
mysql> select * from article order by id desc limit 1 \G;
*************************** 1. row ***************************
id: 108
title: Officia minus id quasi aliquid voluptate.
slug: officia-minus-id-quasi-aliquid-voluptate
content: Ipsa assumenda quia voluptatem maiores aut. Consequuntur officiis quod incidunt sapiente qui. Est numquam consequuntur impedit expedita placeat. Harum nostrum eos non doloribus quis. Earum nihil quas provident ut ut. Suscipit aliquam soluta incidunt et officia. Corrupti itaque autem numquam perferendis dolor.
1 row in set (0.01 sec)
指定语种
type SomeStructForLanguage struct {
StringENG string `faker:"lang=eng"`
StringCHI string `faker:"lang=chi"`
StringRUS string `faker:"lang=rus"`
StringJPN string `faker:"lang=jpn"`
StringKOR string `faker:"lang=kor"`
StringEMJ string `faker:"lang=emj"`
}
但是这个不能跟一些特殊的类型使用,例如想生成句子:
Title string `faker:"sentence,lang=eng"`
Title2 string `faker:"sentence,lang=chi"`
会得到
pKwQWXQUQmYNFvIPTQIxWRGBK
征皇芒愈稉莎龑擘廦商蟔囇鹶鉄鑤肘鍱櫉綽耜冧颰氯雝唻
所以,lang 只适合随机字符串。
安装依赖
go get github.com/go-faker/faker/v4
比较神奇的是,我第一次遇到安装依赖会自动升级 golang 版本的情况。。。
> go get github.com/go-faker/faker/v4
go: downloading github.com/go-faker/faker/v4 v4.7.0
go: github.com/go-faker/faker/v4@v4.7.0 requires go >= 1.24.0; switching to go1.24.10
go: downloading go1.24.10 (linux/amd64)
可能是我本地 golang 版本太低了,没想到 go get 会自动升级 golang 版本 😅 这也太贴心了。
> git diff go.mod
-go 1.23.0
+go 1.24.0
-toolchain go1.23.2
+toolchain go1.24.10
我自己都不知道这个电脑用的还是 go 1.23 🌚🌝。
最后
有了这个库,批量生成测试数据就非常方便了。
当然如果对内容有要求,可能用大模型 API 生成更符合需求。或者用爬虫抓取一批真实数据来进行测试。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式