golang生成dao代码

Python015

golang生成dao代码,第1张

golang服务端项⽬代码⾃动⽣成

公司为了提⾼开发效率,让我搞⼀个代码⾃动⽣成的⼯具,最好是根据数据库可以⽣成全套的(从router到dao)那种,于是我上万能的github上找了⼀个,找到⼀款autocreate 的代码⽣成⼯具,本⾝也是使⽤go开发的,我看了⼀下,效果还不错,并且操作⽅便简洁,⽽且还有web界⾯,clone下来之后,为了让⽣成的代码风格跟我们的项⽬保持⼀致,所以我不得不动源码,原本以为很难,但是百度了⼀下原理就是根据模板渲染。

这些就是项⽬中的模板,包括从model-router-controller-service-dao,当然这些是已经根据公司项⽬修改过的模板,开始只有⼀个controller跟dao以及model,其余的根据⾃⼰需求加就可以了,因为我想要极致的偷懒,所以直接⽣成了全套的。

第 1 页

操作这些模板的就是这个⽂件

⽂件⾥的核⼼代码,当然这也是修改过的

第 2 页

据我使⽤后得知,⾥⾯所谓的三个关键的名字只有table和module有⽤,另⼀个随便填就可以了。

修改之后,在将⽂件的⽣成⽬录修改为你项⽬的⽬录就可以了。控制⽣成⽂件⽬录的是*ContertFile⾥⾯的file变量。

全部修改后,我们就可以go run main.go运⾏起来,进⼊localhost:8081,就可以看到如下界⾯

选择其中⼀个表,就可以进⾏代码⾃动⽣成了!记住,表⼀定要有备注!表⼀定要有备注!表⼀定要有备注!不然是⽣成不了代码的。

第 3 页

这是⽣成的controller中的⼀个例⼦

⽣成之后,service中是没有逻辑的,只需要根据⾃⼰的需求增增改改就好啦,将原来的开发时间缩短了⼀半以上!再也不⽤做那些枯燥的事情!开发从建表-复制粘贴*n-增增改改-⾃测变成了建表-点⼀下-增增改改-⾃测

现在公司所有服务端的⼩伙伴都开始⽤了,我作为⼀个实习⽣,能做好这件事,其实⼼⾥的成就感也是很⼤的haha

主要通过以下几个过程生成:

(一)编写模板文件

(二)配置FreeMarker

(三)统一文件生成工具

(四)数据库操作

(五)封装填充数据

FreeMarker是一款模板引擎:即一种基于模板和动态数据,用于输出文本的通用工具。

FreeMarker模板使用FreeMarker Template Language(FTL)编写,它是一种简单的、专用的语言。

代码生成器的实现原理十分简单,就是根据数据库的某一个或多个业务表的结构,生成对应的Entity.java、Dao.java、Service.java、Controller.java、Mapper.xml文件

语料库文件以特殊格式编码。这是种子语料库和生成语料库的相同格式。

下面是一个语料库文件的例子:

第一行用于通知模糊引擎文件的编码版本。虽然目前没有计划未来版本的编码格式,但设计必须支持这种可能性。

下面的每一行都是构成语料库条目的值,如果需要,可以直接复制到 Go 代码中。

在上面的示例中,我们在 a []byte后跟一个int64。这些类型必须按顺序与模糊测试参数完全匹配。这些类型的模糊目标如下所示:

指定您自己的种子语料库值的最简单方法是使用该 (*testing.F).Add方法。在上面的示例中,它看起来像这样:

但是,您可能有较大的二进制文件,您不希望将其作为代码复制到您的测试中,而是作为单独的种子语料库条目保留在 testdata/fuzz/{FuzzTestName} 目录中。golang.org/x/tools/cmd/file2fuzz 上的file2fuzz工具可用于将这些二进制文件转换为为[]byte.

要使用此工具:

语料库条目:语料库 中的一个输入,可以在模糊测试时使用。这可以是特殊格式的文件,也可以是对 (*testing.F).Add。

覆盖指导: 一种模糊测试方法,它使用代码覆盖范围的扩展来确定哪些语料库条目值得保留以备将来使用。

失败的输入:失败的输入是一个语料库条目,当针对 模糊目标运行时会导致错误或恐慌。

fuzz target: 模糊测试的目标功能,在模糊测试时对语料库条目和生成的值执行。它通过将函数传递给 (*testing.F).Fuzz实现。

fuzz test: 测试文件中的一个被命名为func FuzzXxx(*testing.F)的函数,可用于模糊测试。

fuzzing: 一种自动化测试,它不断地操纵程序的输入,以发现代码可能容易受到的错误或漏洞等问题。

fuzzing arguments: 将传递给 模糊测试目标的参数,并由mutator进行变异。

fuzzing engine: 一个管理fuzzing的工具,包括维护语料库、调用mutator、识别新的覆盖率和报告失败。

生成的语料库: 由模糊引擎随时间维护的语料库,同时模糊测试以跟踪进度。它存储在$GOCACHE/fuzz 中。这些条目仅在模糊测试时使用。

mutator: 一种在模糊测试时使用的工具,它在将语料库条目传递给模糊目标之前随机操作它们。

package: 同一目录下编译在一起的源文件的集合。

种子语料库: 用户提供的用于模糊测试的语料库,可用于指导模糊引擎。它由 f.Add 在模糊测试中调用提供的语料库条目以及包内 testdata/fuzz/{FuzzTestName} 目录中的文件组成。这些条目默认使用go test运行,无论是否进行模糊测试。

测试文件: 格式为 xxx_test.go 的文件,可能包含测试、基准、示例和模糊测试。

漏洞: 代码中的安全敏感漏洞,可以被攻击者利用。