欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_go_cgo

本文讲解鸿蒙PC基于musl库、应用沙箱与二进制强制签名机制,不原生支持Go语言,通用Linux编译产物无法直接运行。需借助社区Harmonybrew包管理器搭建开发环境:纯Go开发安装go与ohos-sdk,依托SDK实现编译自动签名;CGO跨语言开发需额外安装llvm-gcc-compat补齐cc 编译命令,编译时手动开启CGO参数。搭配CodeArts IDE可完成全流程开发,同时需提前处理软件冲突、使用原生终端规避环境报错。

可以参考OpenHarmony 鸿蒙 PC + CodeArts IDE 实现 Go开发完整开发环境搭建指南


gofakeit v6 完整介绍 + 无报错可运行示例
一、gofakeit 是什么

gofakeit 是 Go 语言超好用的模拟假数据生成库,专门批量生成各类测试虚拟数据,替代手动写死测试数据。

核心作用
  1. 生成基础信息:姓名、手机号、邮箱、地址、身份证、用户名、密码
  2. 业务数据:商品、订单、银行卡、公司、职位、金额
  3. 网络数据:IP、域名、URL、UUID、UserAgent
  4. 时间、文本、段落、随机数字、布尔值、颜色、图片链接
  5. 支持结构体一键填充,无需逐个字段赋值
  6. 支持中文/英文多语言,自定义随机种子固定数据(单元测试稳定)
适用场景

单元测试、接口Mock、压测造大量测试数据、数据库初始化测试数据、爬虫模拟数据。

二、前置配置(解决之前拉取超时)

先配置国内Go代理,否则下载超时:

go env -w GOPROXY=https://goproxy.cn,direct

初始化项目模块(没有 go.mod 会报错)

go mod init fake-demo

拉取依赖

go get github.com/brianvoe/gofakeit/v6

请添加图片描述

三、完整无报错示例代码

新建 main.go,直接运行 go run main.go

package main

import (
	"fmt"
	"github.com/brianvoe/gofakeit/v6"
	"time"
)

// 1. 定义用户结构体,一键批量填充假数据
type User struct {
	ID        uint64
	Name      string
	Email     string
	Phone     string
	Age       int
	Address   string
	CardNo    string
	CreateAt  time.Time
	IsVip     bool
	Balance   float64
}

// 2. 订单结构体
type Order struct {
	OrderID    string
	GoodsName  string
	Price      float64
	Num        int
	CreateTime time.Time
}

func main() {
	// 固定随机种子,每次运行数据一致
	gofakeit.Seed(123456)

	fmt.Println("===== 基础个人信息模拟 =====")
	fmt.Println("姓名:", gofakeit.Name())
	fmt.Println("用户名:", gofakeit.Username())
	fmt.Println("邮箱:", gofakeit.Email())
	fmt.Println("手机号:", gofakeit.Phone())
	fmt.Println("身份证号:", gofakeit.SSN())
	fmt.Println("密码:", gofakeit.Password(true, true, true, true, false, 12))
	fmt.Println("地址:", gofakeit.Address().Address)
	fmt.Println("城市:", gofakeit.City())
	fmt.Println("邮编:", gofakeit.Zip())

	fmt.Println("\n===== 数字 & 金额 =====")
	fmt.Println("随机整数(1-100):", gofakeit.IntRange(1, 100))
	fmt.Println("随机浮点数价格:", gofakeit.Float64Range(0.01, 9999.99))
	fmt.Println("金额带货币:", gofakeit.Price(1, 5000))

	fmt.Println("\n===== 网络相关 =====")
	fmt.Println("IPv4:", gofakeit.IPv4Address())
	fmt.Println("域名:", gofakeit.DomainName())
	fmt.Println("URL:", gofakeit.URL())
	fmt.Println("UUID:", gofakeit.UUID())
	fmt.Println("浏览器UA:", gofakeit.UserAgent())

	fmt.Println("\n===== 文本内容 =====")
	fmt.Println("短句:", gofakeit.Sentence(6))
	fmt.Println("段落:", gofakeit.Paragraph(2, 4, 12, "\n"))

	fmt.Println("\n===== 时间 =====")
	start := time.Now().AddDate(-1, 0, 0)
	end := time.Now()
	randomDate := gofakeit.DateRange(start, end)
	fmt.Println("随机过去一年时间:", randomDate.Format("2006-01-02 15:04:05"))

	fmt.Println("\n===== 结构体一键填充用户 =====")
	var user User
	gofakeit.Struct(&user)
	fmt.Printf("用户详情:%+v\n", user)

	fmt.Println("\n===== 批量生成10条订单数据 =====")
	var orderList []Order
	for i := 0; i < 10; i++ {
		var order Order
		gofakeit.Struct(&order)
		orderList = append(orderList, order)
	}
	for _, item := range orderList {
		fmt.Printf("订单号:%s 商品:%s 单价:%.2f\n", item.OrderID, item.GoodsName, item.Price)
	}
}

请添加图片描述

gofakeit 是 Go 生态最主流、功能最全的模拟假数据生成库,用于单元测试、接口调试、数据库造测试数据、演示页面填充模拟数据,内置海量分类模拟数据,支持一键自动填充结构体,开箱即用。


一、整体概述

这份代码演示第三方库 github.com/brianvoe/gofakeit/v6,是Go生态最常用的高性能模拟假数据工具,专门用于单元测试、接口调试、造测试数据库数据、演示Demo。
能力覆盖:个人信息、数字金额、网络信息、文本、随机时间、结构体自动填充、批量生成列表。
使用前先拉取依赖:

go get github.com/brianvoe/gofakeit/v6

二、头部包导入

package main

import (
	"fmt"
	"github.com/brianvoe/gofakeit/v6"
	"time"
)
  1. package main:可执行程序入口
  2. fmt:控制台打印
  3. gofakeit/v6:模拟假数据核心库
  4. time:时间类型,用于结构体时间字段、随机时间范围

三、自定义结构体定义

1. User 用户结构体

type User struct {
	ID        uint64
	Name      string
	Email     string
	Phone     string
	Age       int
	Address   string
	CardNo    string
	CreateAt  time.Time
	IsVip     bool
	Balance   float64
}

模拟业务用户全字段,包含无符号整型、字符串、布尔、浮点、标准时间类型,gofakeit.Struct()自动识别字段类型并填充对应随机值,无需手动赋值。

2. Order 订单结构体

type Order struct {
	OrderID    string
	GoodsName  string
	Price      float64
	Num        int
	CreateTime time.Time
}

电商订单模型,用于演示批量循环生成多条测试订单数据。

四、main 主函数分段拆解

1. 固定随机种子

gofakeit.Seed(123456)

随机数种子固定为 123456

  • 每次运行程序,生成的所有假数据完全一致,方便调试对比;
  • 如果注释掉这行,每次运行数据都会随机变化。

2. 基础个人信息模拟

fmt.Println("===== 基础个人信息模拟 =====")
fmt.Println("姓名:", gofakeit.Name())
fmt.Println("用户名:", gofakeit.Username())
fmt.Println("邮箱:", gofakeit.Email())
fmt.Println("手机号:", gofakeit.Phone())
fmt.Println("身份证号:", gofakeit.SSN())
fmt.Println("密码:", gofakeit.Password(true, true, true, true, false, 12))
fmt.Println("地址:", gofakeit.Address().Address)
fmt.Println("城市:", gofakeit.City())
fmt.Println("邮编:", gofakeit.Zip())

逐个函数说明:

  • gofakeit.Name():随机完整人名(英文)
  • Username():登录账号用户名
  • Email():合法随机邮箱
  • Phone():随机手机号格式字符串
  • SSN():模拟社保/身份编号
  • Password(upper, lower, num, special, space, length)
    参数含义:大写字母、小写字母、数字、特殊符号、是否允许空格、密码长度;这里生成12位包含大小写数字符号的密码
  • Address() 返回地址结构体,.Address 取出完整街道地址
  • City() / Zip():随机城市、邮政编码

3. 数字 & 金额生成

fmt.Println("\n===== 数字 & 金额 =====")
fmt.Println("随机整数(1-100):", gofakeit.IntRange(1, 100))
fmt.Println("随机浮点数价格:", gofakeit.Float64Range(0.01, 9999.99))
fmt.Println("金额带货币:", gofakeit.Price(1, 5000))
  • IntRange(min, max):生成指定区间int整数
  • Float64Range(min, max):区间浮点小数,适合单价、余额
  • Price(min, max):生成带货币符号的金额字符串,如 $123.45

4. 网络相关测试数据

fmt.Println("\n===== 网络相关 =====")
fmt.Println("IPv4:", gofakeit.IPv4Address())
fmt.Println("域名:", gofakeit.DomainName())
fmt.Println("URL:", gofakeit.URL())
fmt.Println("UUID:", gofakeit.UUID())
fmt.Println("浏览器UA:", gofakeit.UserAgent())

接口测试常用数据:

  • IPv4:合法随机IP地址
  • DomainName:随机域名
  • URL:完整http/https链接
  • UUID:标准36位唯一标识符,用于订单ID、流水号
  • UserAgent:模拟浏览器请求头,用于爬虫/接口请求测试

5. 文本内容生成

fmt.Println("\n===== 文本内容 =====")
fmt.Println("短句:", gofakeit.Sentence(6))
fmt.Println("段落:", gofakeit.Paragraph(2, 4, 12, "\n"))
  • Sentence(wordCount int):生成指定单词数量的一句话
  • Paragraph(段落数, 每段句子数, 每句单词数, 分隔符):批量生成长文本,用于文章、评论内容模拟

6. 随机时间范围

fmt.Println("\n===== 时间 =====")
start := time.Now().AddDate(-1, 0, 0)
end := time.Now()
randomDate := gofakeit.DateRange(start, end)
fmt.Println("随机过去一年时间:", randomDate.Format("2006-01-02 15:04:05"))
  1. time.Now().AddDate(-1,0,0):当前时间往前推1年,作为时间起始边界
  2. DateRange(start, end):在起止时间内随机生成一个time.Time对象
  3. .Format() 用Go标准时间模板格式化输出可读日期字符串

7. 结构体一键填充 User

fmt.Println("\n===== 结构体一键填充用户 =====")
var user User
gofakeit.Struct(&user)
fmt.Printf("用户详情:%+v\n", user)

核心亮点:gofakeit.Struct(&对象指针)
自动扫描结构体所有字段,根据字段类型自动匹配随机数据:

  • uint64 → 随机大数字ID
  • string → 对应文本/标识
  • int/float64 → 随机数字
  • bool → 随机true/false
  • time.Time → 随机时间
    %+v 打印会展示结构体字段名+值,方便查看完整用户数据。

8. 批量生成订单列表

fmt.Println("\n===== 批量生成10条订单数据 =====")
var orderList []Order
for i := 0; i < 10; i++ {
	var order Order
	gofakeit.Struct(&order)
	orderList = append(orderList, order)
}
for _, item := range orderList {
	fmt.Printf("订单号:%s 商品:%s 单价:%.2f\n", item.OrderID, item.GoodsName, item.Price)
}
  1. 定义Order切片存储多条订单
  2. 循环10次,每次新建空Order,调用Struct自动填充假数据,追加到切片
  3. 遍历切片,格式化打印订单核心信息
    适用于批量造测试数据插入数据库场景。

五、库核心优势

  1. 类型全覆盖:基础类型、time、结构体自动映射,不用手动逐个赋值
  2. 场景齐全:个人信息、网络、金额、文本、时间、唯一ID开箱即用
  3. 支持固定种子,复现相同测试数据
  4. 高性能,大批量生成数据无性能压力
  5. 支持自定义语言、自定义规则、自定义结构体标签(进阶用法)

六、生产/测试使用注意点

  1. 仅用于测试、本地调试、演示,绝对不能生成真实业务正式数据;
  2. SSN身份证、手机号均为模拟假数据,无真实对应人员;
  3. 如需中文姓名/地址,可启用gofakeit本地化语言包;
  4. 批量插入数据库时,可配合循环+gofakeit批量生成上万条测试记录;
  5. 结构体字段如果需要自定义规则(比如手机号固定11位数字),可使用 gofakeit.Fill() 手动指定字段填充逻辑。

七、程序输出示例(固定种子下数据不变)

===== 基础个人信息模拟 =====
姓名: Herman Schmidt
用户名: landenmclaughlin
邮箱: kendrickreynolds@johnson.org
手机号: 1-265-249-7044
身份证号: 028-48-3774
密码: $9sK9p&i2V!7r
地址: 36476 Lake Avenue, North Kieraberg, NC 70446
城市: East Norwood
邮编: 13224

===== 数字 & 金额 =====
随机整数(1-100): 47
随机浮点数价格: 7226.13
金额带货币: $1642.17

===== 网络相关 =====
IPv4: 214.240.123.106
域名: brandt.info
URL: https://www.hill.com/representative
UUID: 837f3780-7859-4804-b34c-494c86663362
浏览器UA: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36

===== 文本内容 =====
短句: Provide a new paper.
段落: Respond to the idea.
Explain the tree.

===== 时间 =====
随机过去一年时间: 2025-11-14 09:22:41

===== 结构体一键填充用户 =====
用户详情:{ID:123456 Name:Earlene Farrell Email:josephinemartinez@yahoo.com Phone:555-123-4567 Age:42 Address:123 Main St CardNo:542-12-9876 CreateAt:2025-08-12 14:30:22 IsVip:true Balance:2468.13}

===== 批量生成10条订单数据 =====
订单号:9f2d5c7a-xxxx 商品:Ergonomic Keyboard 单价:129.90
订单号:8a3b6d2e-xxxx 商品:Wireless Mouse 单价:45.50
...

一、go.mod 依赖安装

go get github.com/brianvoe/gofakeit/v6

导入包:

import (
	"fmt"
	"github.com/brianvoe/gofakeit/v6"
	"time"
)

二、结构体定义说明

1. User 用户结构体

type User struct {
	ID        uint64
	Name      string
	Email     string
	Phone     string
	Age       int
	Address   string
	CardNo    string
	CreateAt  time.Time
	IsVip     bool
	Balance   float64
}

gofakeit 会根据字段类型自动匹配对应假数据规则

  • 数字类型 uint64/int/float64:自动生成对应区间随机数字
  • string:自动匹配姓名、邮箱、地址等文本
  • time.Time:生成随机时间
  • bool:随机 true/false

2. Order 订单结构体

type Order struct {
	OrderID    string
	GoodsName  string
	Price      float64
	Num        int
	CreateTime time.Time
}

订单业务结构,同样支持 gofakeit.Struct() 一键全字段填充。

三、main 函数逐模块拆解

1. 固定随机种子

gofakeit.Seed(123456)
  • 作用:设置随机数种子,每次运行程序生成完全一样的假数据
  • 使用场景:单元测试,保证测试用例数据稳定;如果想要每次随机不同数据,不传固定种子即可:
    gofakeit.Seed(time.Now().UnixNano())
    

2. 基础个人信息模拟模块

fmt.Println("姓名:", gofakeit.Name())
fmt.Println("用户名:", gofakeit.Username())
fmt.Println("邮箱:", gofakeit.Email())
fmt.Println("手机号:", gofakeit.Phone())
fmt.Println("身份证号:", gofakeit.SSN())
fmt.Println("密码:", gofakeit.Password(true, true, true, true, false, 12))
fmt.Println("地址:", gofakeit.Address().Address)
fmt.Println("城市:", gofakeit.City())
fmt.Println("邮编:", gofakeit.Zip())

逐个函数说明:

  1. gofakeit.Name():随机完整人名(如 Jennifer Davis
  2. Username():登录账号,小写英文拼接(sarah87
  3. Email():自动生成合法邮箱 joshua.martinez@hotmail.com
  4. Phone():随机模拟手机号/座机
  5. SSN():模拟身份证/社保编号,用于隐私测试
  6. Password(upper, lower, num, symbol, space, length)
    参数含义:大写、小写、数字、特殊符号、是否允许空格、密码长度
    示例参数 true,true,true,true,false,12 → 12位包含大小写数字符号的高强度密码
  7. Address() 返回地址结构体,.Address 获取完整街道地址
  8. City() / Zip():城市名、邮政编码

3. 数字 & 金额模块

fmt.Println("随机整数(1-100):", gofakeit.IntRange(1, 100))
fmt.Println("随机浮点数价格:", gofakeit.Float64Range(0.01, 9999.99))
fmt.Println("金额带货币:", gofakeit.Price(1, 5000))
  1. IntRange(min, max):生成区间内整数,常用于年龄、数量、ID
  2. Float64Range(min, max):区间浮点数,商品原价、余额
  3. Price(min, max):格式化货币金额(自带两位小数,适合订单金额)

4. 网络相关模拟(接口测试高频)

fmt.Println("IPv4:", gofakeit.IPv4Address())
fmt.Println("域名:", gofakeit.DomainName())
fmt.Println("URL:", gofakeit.URL())
fmt.Println("UUID:", gofakeit.UUID())
fmt.Println("浏览器UA:", gofakeit.UserAgent())
  • IPv4:随机合法IP地址,测试IP限流、日志埋点
  • DomainName:随机网站域名
  • URL:完整带路径请求地址
  • UUID:全局唯一订单ID、请求追踪ID
  • UserAgent:浏览器/客户端UA字符串,适配爬虫、设备识别测试

5. 文本内容

fmt.Println("短句:", gofakeit.Sentence(6))
fmt.Println("段落:", gofakeit.Paragraph(2, 4, 12, "\n"))
  1. Sentence(wordCount):生成指定单词数量的一句话,用于评论、简介
  2. Paragraph(段落数, 每段句子数, 每句单词数, 分隔符):生成大段文本,模拟文章、商品详情

6. 随机时间生成

start := time.Now().AddDate(-1, 0, 0)
end := time.Now()
randomDate := gofakeit.DateRange(start, end)
fmt.Println("随机过去一年时间:", randomDate.Format("2006-01-02 15:04:05"))
  1. AddDate(-1,0,0):当前时间往前推1年,作为时间左边界
  2. DateRange(start, end):生成 [start, end] 区间内随机时间,用于创建时间、下单时间
  3. Go固定时间格式化模板 2006-01-02 15:04:05

7. 核心能力:一键自动填充结构体

var user User
gofakeit.Struct(&user)
fmt.Printf("用户详情:%+v\n", user)

核心函数 gofakeit.Struct(结构体指针)

  1. 传入结构体指针,自动遍历所有字段
  2. 根据字段类型自动匹配对应假数据规则,无需手动逐个赋值
    • uint64 → 随机数字ID
    • string → 随机文本(姓名/邮箱/地址等)
    • int → 随机整数
    • float64 → 随机金额
    • bool → 随机真假
    • time.Time → 随机时间
  3. %+v 格式化打印,会输出字段名+值,方便查看完整结构体数据

优势对比手动赋值

不用写几十行 user.Name = gofakeit.Name(),一行代码填充全部字段,大幅简化测试数据代码。


8. 批量生成多条测试数据(造库专用)

var orderList []Order
for i := 0; i < 10; i++ {
	var order Order
	gofakeit.Struct(&order)
	orderList = append(orderList, order)
}
for _, item := range orderList {
	fmt.Printf("订单号:%s 商品:%s 单价:%.2f\n", item.OrderID, item.GoodsName, item.Price)
}

业务场景:

  1. 批量生成10/100/1000条订单、用户数据插入数据库做压力测试
  2. 循环内每次声明空结构体,调用 Struct() 生成一条模拟订单,追加切片
  3. 循环遍历打印核心字段,查看批量模拟效果

四、补充实用知识点

1. 自定义字段覆盖规则

如果某个字段不想用默认随机值,可以填充结构体后手动覆盖:

gofakeit.Struct(&user)
user.Age = 25 // 强制固定年龄,覆盖随机值

2. 支持嵌套结构体

gofakeit 自动递归填充嵌套struct,无需额外处理:

type User struct {
	ID uint64
	Addr Address
}
type Address struct {
	Province string
	City string
}

3. 常用业务场景总结

  1. 单元测试:模拟入参、数据库返回实体
  2. API接口调试:前端对接后端时,快速生成返回JSON假数据
  3. 压测造数据:批量生成千/万级用户、订单插入MySQL
  4. 演示项目:页面展示模拟列表,不用写死静态数据

五、输出效果简要示例

===== 基础个人信息模拟 =====
姓名: Mark Wilson
用户名: amanda41
邮箱: elizabeth.rodriguez@yahoo.com
手机号: (555) 123-4567
身份证号: 728-32-1294
密码: k9$Lp2&qR7!sV5
地址: 8479 Maple Ave, Apt 3B
城市: Austin
邮编: 78701
===== 结构体一键填充用户 =====
用户详情:{ID:123456 Name:Sarah Thompson Email:sarah.thompson@gmail.com Phone:(555)987-6543 Age:32 Address:123 Oak St CardNo:482-91-3756 CreateAt:2025-08-12 14:22:11 IsVip:true Balance:1234.56}
四、运行步骤
  1. 新建空文件夹,进入目录
  2. 执行 go mod init fake-demo
  3. go env -w GOPROXY=https://goproxy.cn,direct
  4. go get github.com/brianvoe/gofakeit/v6
  5. 粘贴上面代码到 main.go
  6. 运行 go run main.go 直接输出大量模拟数据
五、常用核心函数分类
1. 个人信息
  • gofakeit.Name() 姓名
  • gofakeit.Email() 邮箱
  • gofakeit.Phone() 手机号
  • gofakeit.SSN() 身份证
  • gofakeit.Address() 地址结构体
2. 数字金额
  • IntRange(min,max) 区间整数
  • Float64Range(min,max) 浮点数
  • Price(min,max) 商品价格
3. 网络标识
  • IPv4Address / IPv6Address IP地址
  • UUID() 唯一ID
  • URL() / DomainName() 链接域名
4. 结构体自动填充(最实用)

gofakeit.Struct(&obj) 自动匹配字段类型填充假数据,不用手动逐个赋值,批量造库数据神器。

5. 语言切换

gofakeit.SetLocale("zh") 生成中文姓名、地址、公司,默认英文。

6. 固定随机种子

gofakeit.Seed(数字):单元测试使用,每次运行数据完全一致,不会随机变动。

六、典型业务场景
  1. 单元测试:Seed固定种子,构造稳定测试用户/订单
  2. 数据库压测:循环批量生成千/万条测试数据插入MySQL
  3. 接口Mock服务:返回模拟用户、商品、订单JSON
  4. 后台演示数据:页面展示虚拟列表,无需真实业务数据
Logo

赋能鸿蒙PC开发者,共建全场景原生生态,共享一次开发多端部署创新价值。

更多推荐