news 2026/10/17 2:41:47

goDataFake数据使用说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
goDataFake数据使用说明
## DataFake 使用说明 `DataFake` 是一个用于生成模拟测试数据的工具类,主要用于生成试卷(Papers)、句子(Sentences)和单词标记(Tokens)的假数据。 ### 1. 获取实例 通过依赖注入获取单例: ```go import "gowfa/data/fake/simpleMake" dataFake := simpleMake.FindBeanDataFake() ``` 或者手动创建: ```go dataFake := simpleMake.NewDataFake() ``` ### 2. 主要方法 #### 2.1 生成模拟试卷 - `MakeFakePapers` ```go ret := dataFake.MakeFakePapers(200) // 生成 200 条试卷数据 if ret.IsFailed() { // 处理错误 } ``` - **参数**: `total` - 要生成的试卷数量 - **返回**: `*basedto.IchubResult` - 操作结果 - **功能**: 随机生成试卷数据,包括年份、级别、科目(英语)、总分等 #### 2.2 生成模拟句子 - `MakeFakeSentences` ```go ret := dataFake.MakeFakeSentences(200) // 生成 200 条句子数据 ``` - **参数**: `total` - 要生成的句子数量 - **返回**: `*basedto.IchubResult` - **功能**: 基于现有试卷生成句子数据,每个句子包含 6 个随机单词 #### 2.3 生成 Token 数据 - `MakeTakeTokens` ```go ret := dataFake.MakeTakeTokens(200) // 基于 200 条句子生成 Token ``` - **参数**: `total` - 要处理的句子数量 - **返回**: `*basedto.IchubResult` - **功能**: 将句子按空格拆分为单词,为每个单词创建 Token 记录 #### 2.4 查询方法 ```go // 查询试卷 papers := dataFake.QueryPapers(10) // 查询 10 条 // 查询句子 sentences := dataFake.QuerySentences(10) // 查询 10 条 ``` #### 2.5 辅助方法 ```go // 生成随机单词 words := dataFake.MakeWords(10) // 生成 10 个随机单词 // 从字符串中随机获取 ID id := dataFake.GetIdRandom("1\n2\n3") // 随机返回 1, 2 或 3 // 从数组中随机取值 val := dataFake.Fake([]int{2015, 2020, 2021}) // 随机返回其中一个年份 ``` ### 3. 典型使用流程 ```go // 1. 生成试卷 ret := simpleMake.FindBeanDataFake().MakeFakePapers(200) if ret.IsFailed() { logrus.Error(ret) return } // 2. 生成句子(依赖试卷) ret = simpleMake.FindBeanDataFake().MakeFakeSentences(200) // 3. 生成 Token(依赖句子) simpleMake.FindBeanDataFake().MakeTakeTokens(200) ``` ### 4. 数据依赖关系 ``` Papers (试卷) ↓ Sentences (句子) - 关联 PaperId ↓ Tokens (单词) - 关联 SentenceId ``` ### 5. 测试示例 参考测试文件: [data_fake_test.go](file:///E:/soft/go_wfa/data/fake/simpleMake/data_fake_test.go#L35-L45) func (self *TestDbFacadeSuite) Test001_Init() { ret := FindBeanDbFacade().QueryDict(dbentity.DictTypeQuestionType) if ret.IsFailed() { logrus.Error(ret) return } golog.Info(ret) }

package fake import ( "gowfa/domain/db/dbdao" "gowfa/domain/db/dbentity" "gowfa/domain/db/dbfacade" "strings" "time" "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto" "gitee.com/gowebframe3/webframe.git/goconfig/base/baseiface" "gitee.com/gowebframe3/webframe.git/goconfig/ichublog/golog" "gitee.com/gowebframe3/webframe.git/goweb/pagemodel" "github.com/brianvoe/gofakeit/v7" "github.com/duke-git/lancet/random" "github.com/gogf/gf/v2/util/gconv" "github.com/samber/lo" ) var itemType = `6 7 8 9 5 15 18 20` var examLevel = `10 11 12 14 16 17 13` type DataFake struct { basedto.BaseEntitySingle } func NewDataFake() *DataFake { return &DataFake{} } var trainIds = `1952534107195969536 2062709551269941248` var years = []int32{ 1952, 2020, 2021, 2022, 2023, 2024, } var pos = []int32{ 10, 20, 30, 40, 50, 60, 70, 80, 90, } var position = []int32{ 1, 3, 4, 5, 2, 6, } func (self *DataFake) GetTrainIdRandom() int64 { var len = len(trainIds) var i = random.RandInt(1, len) return int64(gconv.Int(trainIds[i-1])) } func (self *DataFake) Fake(v []int) int { var i = random.RandInt(1, len(v)) return v[i-1] } func (self *DataFake) MakeEntityMockY(entity baseiface.IpoolObj) int32 { entity.Init() gofakeit.Struct(entity) return int32(self.Fake(gconv.SliceInt(years))) } func (self *DataFake) MakeFakePapers(total int) *basedto.IchubResult { var papersDao = dbdao.FindBeanWfaExamPapersDao() for range total { var papers = dbentity.FindBeanWfaExamPapers() var y = self.MakeEntityMockY(papers) papers.ExamYear = y papers.ExamLevel = self.GetIdRandom(examLevel) papers.CreatedAt = time.Now() papers.DeletedAt = nil papers.UpdatedAt = time.Now() papers.PaperName = gofakeit.Word() papers.TotalScore = 100 papers.Subject = "英文" papers.Id = 0 if ret := papersDao.Save2Result(papers); ret.IsFailed() { golog.Error(ret) return ret } } return basedto.ResultOk() } func (self *DataFake) GetIdRandom(idStr any) int64 { var ids []string if idss, ok := idStr.(string); ok { ids = strings.Split(idss, "\n") } else { ids = gconv.SliceStr(idStr) } var len = len(ids) if len == 0 { return -1 } var i = random.RandInt(1, len) return int64(gconv.Int(ids[i-1])) } func (self *DataFake) QueryPapers(size int) *pagemodel.PageResult[*dbentity.WfaExamPapers] { var dao = dbdao.FindBeanWfaExamPapersDao() dao.PageSize = size return dao.QueryModel() } func getItemType() []int64 { var ret = dbfacade.FindBeanDbFacade().QueryDict(dbentity.DictTypeQuestionType) return lo.Map(ret.Data, func(item *dbentity.WfaDict, _ int) int64 { return item.Id }) } func getLevels() []int64 { var ret = dbfacade.FindBeanDbFacade().QueryDict(dbentity.DictTypeExamLevel) return lo.Map(ret.Data, func(item *dbentity.WfaDict, _ int) int64 { return item.Id }) } func (self *DataFake) MakeFakeSentences(total int) *basedto.IchubResult { var papers = self.QueryPapers(total) var sentenceDao = dbdao.FindBeanWfaSentenceDao() for range total { var wfaSentence = dbentity.FindBeanWfaSentence() var y = self.MakeEntityMockY(wfaSentence) wfaSentence.Year = y var i = random.RandInt(1, len(papers.Data)) wfaSentence.PaperId = papers.Data[i-1].Id wfaSentence.PaperName = papers.Data[i-1].PaperName wfaSentence.ExamLevel = papers.Data[i-1].ExamLevel wfaSentence.QuestionType = self.GetIdRandom(itemType) wfaSentence.CreatedAt = time.Now() wfaSentence.UpdatedAt = time.Now() wfaSentence.Id = 0 wfaSentence.DeletedAt = nil wfaSentence.Sentence = gofakeit.Word() + " " + gofakeit.Word() + " " + gofakeit.Word() if ret := sentenceDao.Save2Result(wfaSentence); ret.IsFailed() { golog.Error(ret) return ret } } return basedto.ResultOk() } func (self *DataFake) QuerySentences(size int) *pagemodel.PageResult[*dbentity.WfaSentence] { var dao = dbdao.FindBeanWfaSentenceDao() dao.PageSize = size return dao.QueryModel() } func (self *DataFake) MakeFakeTokens(total int) *basedto.IchubResult { var papers = self.QuerySentences(total) var pids = lo.Map(papers.Data, func(item *dbentity.WfaSentence, _ int) string { return gconv.String(item.Id) }) var tokenDao = dbdao.FindBeanWfaTokenDao() for range total { var wfaToken = dbentity.FindBeanWfaToken() self.MakeEntityMockY(wfaToken) wfaToken.CreatedAt = time.Now() wfaToken.UpdatedAt = time.Now() wfaToken.Id = 0 wfaToken.DeletedAt = nil wfaToken.SentenceId = self.GetIdRandom(pids) wfaToken.Pos = int32(self.Fake(gconv.SliceInt(pos))) wfaToken.Position = int32(self.Fake(gconv.SliceInt(position))) if ret := tokenDao.Save2Result(wfaToken); ret.IsFailed() { golog.Error(ret) return ret } } return basedto.ResultOk() }
package dbfacade import ( "gowfa/domain/db/dbdao" "gowfa/domain/db/dbentity" "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto" "gitee.com/gowebframe3/webframe.git/goweb/pagemodel" ) type DbFacade struct { basedto.BaseEntitySingle WfaDictDao *dbdao.WfaDictDao } func NewDbFacade() *DbFacade { return &DbFacade{} } func (self *DbFacade) Init() { self.WfaDictDao = dbdao.FindBeanWfaDictDao() } func (self *DbFacade) AutoInit() bool { return true } func (self *DbFacade) QueryDict(dictType int32) *pagemodel.PageResult[*dbentity.WfaDict] { var dao = self.WfaDictDao.NewDao() dao.DbEq("dict_type", dictType) var ret = dao.QueryModelAll() return ret }
package dbfacade import ( "gowfa/domain/db/dbdao" "gowfa/domain/db/dbentity" "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto" "gitee.com/gowebframe3/webframe.git/goweb/pagemodel" ) type DbFacade struct { basedto.BaseEntitySingle WfaDictDao *dbdao.WfaDictDao } func NewDbFacade() *DbFacade { return &DbFacade{} } func (self *DbFacade) Init() { self.WfaDictDao = dbdao.FindBeanWfaDictDao() } func (self *DbFacade) AutoInit() bool { return true } func (self *DbFacade) QueryDict(dictType int32) *pagemodel.PageResult[*dbentity.WfaDict] { var dao = self.WfaDictDao.NewDao() dao.DbEq("dict_type", dictType) var ret = dao.QueryModelAll() return ret }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 2:41:15

SaaS套餐怎么设计?能力项、资源配额、版本与租户订阅的建模方法

一个 SaaS 系统刚上线时,常见做法是在租户表上放 plan_type,再用 if (plan_type PRO) 判断能不能使用批量报表。只要套餐永远不变,这样似乎够用。但当平台把专业版每月报表任务上限从 20 次调整为 30 次时,问题就来了&#xff1a…

作者头像 李华
网站建设 2026/10/17 2:40:12

Git团队协作实战:从快照模型到分支管理与故障排查

我最早把Git版本控制系统当作正经工具来用,是在维护一个多端共用的业务项目时。当时仓库里已经堆了几十个分支,有人习惯直接在主干上改,有人开了分支三个月不合并,每次发版前最怕的不是业务复杂度,而是把线上分支合并回…

作者头像 李华
网站建设 2026/10/17 2:39:50

服务账号+域级授权:跨域用户管理API批量操作实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/17 2:38:59

OpenSSL 1.1.1源码编译与TLS 1.3配置实战指南

简介:OpenSSL 1.1.1 是面向 Windows 32 位系统的 SSL/TLS 协议实现库,适合程序员、运维人员及安全测试人员在 Windows 环境下进行加密通信开发、证书管理和安全连接调试,能够有效解决数据在传输过程中的保密性、完整性与身份认证等问题。压缩…

作者头像 李华
网站建设 2026/10/17 2:37:46

信息论|联合熵、条件熵、互信息、熵不等式、典型习题训练

** 信息论|联合熵、条件熵、互信息、熵不等式、典型习题训练 内容:信息论基础 ,联合熵 ,条件熵 ,互信息 ,信息论计算题 前言 上篇学习了单变量信源的自信息量与信息熵。在实际通信系统中,发送端…

作者头像 李华