golang基于模板生成随机数据的实用工具插件moldova的使用

Golang基于模板生成随机数据的实用工具插件Moldova的使用

Moldova是一个轻量级的模板解释器,用于根据一系列自定义标记生成随机值并插入到模板中。

安装与使用

首先安装Moldova命令行工具:

go install github.com/StabbyCutyou/moldova/cmd/moldova

命令接受2个参数:

  • n - 要渲染到STDOUT的模板数量,默认为1,不能小于1
  • t - 要渲染的模板

示例

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 : 整数 >= 0
  • zone : 时区

内置格式:

  • simple - “2006-01-02 15:04:05”
  • simpletz - “2006-01-02 15:04:05 -0700”

{time}

生成随机时间字符串

选项:

  • min : Unix时间戳最小值
  • max : Unix时间戳最大值
  • format : 同{now}
  • ordinal : 整数 >= 0
  • zone : 时区

{int}

生成随机整数

选项:

  • min : 最小值
  • max : 最大值
  • ordinal : 整数 >= 0

默认范围:0到100

{float}

生成随机浮点数

选项:

  • min : 最小值
  • max : 最大值
  • ordinal : 整数 >= 0

默认范围:0.0到100.0

{unicode}

生成随机Unicode字符串

选项:

  • length : 长度 >= 1
  • case : “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

1 回复

更多关于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提供了多种内置的随机数据生成器:

  1. 个人信息

    • {{firstName}} - 随机名字
    • {{lastName}} - 随机姓氏
    • {{fullName}} - 随机全名
    • {{email}} - 随机邮箱
    • {{phone}} - 随机电话号码
  2. 地址信息

    • {{street}} - 随机街道地址
    • {{city}} - 随机城市
    • {{country}} - 随机国家
    • {{zip}} - 随机邮编
  3. 数字和ID

    • {{uuid}} - UUID
    • {{number}} - 随机数字
    • {{number:min,max}} - 指定范围的随机数字
  4. 日期时间

    • {{timestamp}} - 当前时间戳
    • {{date}} - 随机日期
  5. 文本内容

    • {{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)
}

实际应用场景

  1. 测试数据生成
// 生成测试用户数据
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
}
  1. 数据库填充
// 生成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是一个灵活强大的工具,通过模板化的方式可以快速生成各种格式的随机数据,大大提高了开发和测试效率。

回到顶部