golang基于模板生成随机数据的实用工具插件moldova的使用
Golang基于模板生成随机数据的实用工具插件Moldova的使用
Moldova是一个轻量级的模板解释器,用于根据一系列自定义标记生成随机值并插入到模板中。
安装与使用
首先安装Moldova命令行工具:
go install github.com/StabbyCutyou/moldova/cmd/moldova
命令接受2个参数:
n
- 要渲染到STDOUT的模板数量,默认为1,不能小于1t
- 要渲染的模板
示例
moldova -t "INSERT INTO floof VALUES ('{guid}','{guid:ordinal:0}','{country}',{int:min:-2000|max:0},{int:min:100|max:1000},{float:min:-1000.0|max:-540.0},{int:min:1|max:40},'{now}','{now:ordinal:0}','{country:case:up}',NULL,-3)" -n 100
这会生成类似以下的输出:
INSERT INTO floof VALUES ('791add99-43df-44c8-8251-6f7af7a014df','791add99-43df-44c8-8251-6f7af7a014df','MU',-1540,392,-624.529332,39,'2016-01-24 23:42:49','2016-01-24 23:42:49','UN',NULL,-3)
INSERT INTO floof VALUES ('0ab4cc33-6689-404f-a801-4fd431ca3f30','0ab4cc33-6689-404f-a801-4fd431ca3f30','PL',-1707,112,-550.333145,1,'2016-01-24 23:42:49','2016-01-24 23:42:49','SS',NULL,-3)
INSERT INTO floof VALUES ('a3f4151a-a304-4190-a3df-7fd97ce58588','a3f4151a-a304-4190-a3df-7fd97ce58588','CM',-1755,569,-961.122173,25,'2016-01-24 23:42:49','2016-01-24 23:42:49','NE',NULL,-3)
标记语法
标记由特殊值放在{ }
字符中表示,格式如下:
{command:argument_name:value|argument_name:value|...|...}
示例:
{int}
{int:min:10}
{int:min:10|max:50}
{int:min:10|max:50|ordinal:0}
支持的标记类型
{guid}
生成GUID/UUID
选项:
ordinal
: 整数 >= 0
示例:
"{guid} - {guid:ordinal:0}" -- 两个guid会替换为相同的值
{now}
生成当前时间字符串
选项:
format
: “simple”、"simpletz"或自定义Go日期格式字符串ordinal
: 整数 >= 0zone
: 时区
内置格式:
simple
- “2006-01-02 15:04:05”simpletz
- “2006-01-02 15:04:05 -0700”
{time}
生成随机时间字符串
选项:
min
: Unix时间戳最小值max
: Unix时间戳最大值format
: 同{now}ordinal
: 整数 >= 0zone
: 时区
{int}
生成随机整数
选项:
min
: 最小值max
: 最大值ordinal
: 整数 >= 0
默认范围:0到100
{float}
生成随机浮点数
选项:
min
: 最小值max
: 最大值ordinal
: 整数 >= 0
默认范围:0.0到100.0
{unicode}
生成随机Unicode字符串
选项:
length
: 长度 >= 1case
: “up"或"down”ordinal
: 整数 >= 0
默认长度:2
{ascii}
生成随机ASCII字符串
选项同{unicode}
{firstname}
生成随机名字
选项:
language
: 语言代码case
: “up"或"down”ordinal
: 整数 >= 0
{lastname}
生成随机姓氏
选项同{firstname}
{country}
生成ISO 3166-1 alpha-2国家代码
选项:
case
: “up"或"down”ordinal
: 整数 >= 0
完整示例
package main
import (
"fmt"
"github.com/StabbyCutyou/moldova"
)
func main() {
// 使用模板生成随机数据
template := "User: {firstname} {lastname}, Country: {country}, ID: {guid}, Age: {int:min:18|max:99}"
// 生成5条随机数据
for i := 0; i < 5; i++ {
result, err := moldova.Generate(template)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(result)
}
}
输出示例:
User: John Smith, Country: US, ID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8, Age: 42
User: Maria Garcia, Country: ES, ID: 6ba7b811-9dad-11d1-80b4-00c04fd430c8, Age: 31
User: 张伟, Country: CN, ID: 6ba7b812-9dad-11d1-80b4-00c04fd430c8, Age: 27
User: Jean Dupont, Country: FR, ID: 6ba7b813-9dad-11d1-80b4-00c04fd430c8, Age: 53
User: Anna Müller, Country: DE, ID: 6ba7b814-9dad-11d1-80b4-00c04fd430c8, Age: 38
Moldova是一个功能强大的随机数据生成工具,特别适合生成测试数据或模拟数据。通过灵活的模板语法,可以轻松生成各种格式的随机数据。
更多关于golang基于模板生成随机数据的实用工具插件moldova的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang基于模板生成随机数据的实用工具插件moldova的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用moldova生成随机数据的Golang模板工具
moldova是一个基于模板生成随机数据的Golang工具,它允许你通过定义模板来生成各种格式的随机数据,非常适合用于测试、模拟数据等场景。
安装moldova
go get github.com/borodun/moldova
基本使用示例
package main
import (
"fmt"
"github.com/borodun/moldova"
)
func main() {
// 初始化moldova
m := moldova.New()
// 定义一个简单模板
template := `{
"id": "{{uuid}}",
"name": "{{firstName}} {{lastName}}",
"age": {{number:20,60}},
"email": "{{email}}",
"address": {
"street": "{{street}}",
"city": "{{city}}",
"country": "{{country}}"
},
"createdAt": "{{timestamp}}"
}`
// 生成随机数据
result, err := m.Generate(template)
if err != nil {
panic(err)
}
fmt.Println(result)
}
支持的模板变量
moldova提供了多种内置的随机数据生成器:
-
个人信息:
{{firstName}}
- 随机名字{{lastName}}
- 随机姓氏{{fullName}}
- 随机全名{{email}}
- 随机邮箱{{phone}}
- 随机电话号码
-
地址信息:
{{street}}
- 随机街道地址{{city}}
- 随机城市{{country}}
- 随机国家{{zip}}
- 随机邮编
-
数字和ID:
{{uuid}}
- UUID{{number}}
- 随机数字{{number:min,max}}
- 指定范围的随机数字
-
日期时间:
{{timestamp}}
- 当前时间戳{{date}}
- 随机日期
-
文本内容:
{{lorem:10}}
- 10个单词的随机文本{{sentence}}
- 随机句子{{paragraph}}
- 随机段落
高级用法
自定义生成器
你可以注册自定义的生成器函数:
package main
import (
"fmt"
"github.com/borodun/moldova"
)
func main() {
m := moldova.New()
// 注册自定义生成器
m.Register("custom", func(params ...string) (string, error) {
return "custom-value", nil
})
template := `{"customField": "{{custom}}"}`
result, _ := m.Generate(template)
fmt.Println(result) // 输出: {"customField": "custom-value"}
}
生成数组数据
package main
import (
"fmt"
"github.com/borodun/moldova"
)
func main() {
m := moldova.New()
template := `{
"users": [
{{range $i := seq 3}}
{
"id": {{$i}},
"name": "{{firstName}}"
}{{if lt $i 2}},{{end}}
{{end}}
]
}`
result, _ := m.Generate(template)
fmt.Println(result)
}
条件生成
package main
import (
"fmt"
"github.com/borodun/moldova"
)
func main() {
m := moldova.New()
template := `{
"user": {
"name": "{{firstName}}",
{{if eq (number:0,1) 1}}
"premium": true,
"expires": "{{date}}"
{{else}}
"premium": false
{{end}}
}
}`
result, _ := m.Generate(template)
fmt.Println(result)
}
实际应用场景
- 测试数据生成:
// 生成测试用户数据
func generateTestUsers(count int) []string {
m := moldova.New()
var users []string
template := `{
"id": "{{uuid}}",
"username": "user{{number:1000,9999}}",
"email": "{{email}}",
"active": {{if eq (number:0,1) 1}}true{{else}}false{{end}}
}`
for i := 0; i < count; i++ {
user, _ := m.Generate(template)
users = append(users, user)
}
return users
}
- 数据库填充:
// 生成SQL插入语句
func generateSQLInserts(table string, count int) []string {
m := moldova.New()
var inserts []string
template := `INSERT INTO ` + table + ` (id, name, email, age) VALUES (
'{{uuid}}',
'{{firstName}} {{lastName}}',
'{{email}}',
{{number:18,65}}
);`
for i := 0; i < count; i++ {
insert, _ := m.Generate(template)
inserts = append(inserts, insert)
}
return inserts
}
moldova是一个灵活强大的工具,通过模板化的方式可以快速生成各种格式的随机数据,大大提高了开发和测试效率。