如何借助工具快速生成代码?初学者容易踩的坑有哪些?

简介: 这篇内容继续分享重点内容:如何借助工具快速生成代码?初学者容易踩的坑有哪些?

本期重点


使用 gen service 自动生成代码


注意:该功能特性从goframe v2.1版本开始提供。


基本介绍


设计背景


在业务项目实践中,业务逻辑封装往往是最复杂的部分,同时,业务模块之间的依赖十分复杂、边界模糊,无法采用Golang包管理的形式。

如何有效管理项目中的业务逻辑封装部分呢?对于每个采用Golang开发的项目都是必定会遇到的难题。


设计目标


增加logic分类目录,将所有业务逻辑代码迁移到logic分类目录下,采用包管理形式来管理业务模块。

业务模块之间的依赖通过接口化解耦,将原有的service分类调整为接口目录。这样每个业务模块将会各自维护、更加灵活。

可以按照一定的项目规范,从logic业务逻辑代码生成service接口定义代码。

同时,也允许人工维护这部分service接口。


命令使用


gf gen service命令通过分析给定的logic业务逻辑模块目录下的代码,自动生成service目录接口代码。


需要注意:

  1. 由于该命令是根据业务模块生成service接口,因此只会解析二级目录下的go代码文件,并不会无限递归分析代码文件。以logic目录为例,该命令只会解析logic/xxx/*.go文件。因此,需要logic层代码结构满足一定规范。
  2. 不同业务模块中定义的结构体名称在生成的service接口名称时可能会重复覆盖,因此需要在设计业务模块时保证名称不能冲突。 手动模式


手动执行(不建议)


如果是手动执行命令行,直接在项目根目录下执行 gf gen service 即可。


$ gf gen service -h
USAGE
    gf gen service [OPTION]
OPTION
    -s, --srcFolder         source folder path to be parsed. default: internal/logic
    -d, --dstFolder         destination folder path storing automatically generated go files. default: internal/service
    -f, --dstFileNameCase   destination file name storing automatically generated go files, cases are as follows:
                            | Case            | Example            |
                            |---------------- |--------------------|
                            | Lower           | anykindofstring    |
                            | Camel           | AnyKindOfString    |
                            | CamelLower      | anyKindOfString    |
                            | Snake           | any_kind_of_string | default
                            | SnakeScreaming  | ANY_KIND_OF_STRING |
                            | SnakeFirstUpper | rgb_code_md5       |
                            | Kebab           | any-kind-of-string |
                            | KebabScreaming  | ANY-KIND-OF-STRING |
    -w, --watchFile         used in file watcher, it re-generates all service go files only if given file is under
                            srcFolder
    -a, --stPattern         regular expression matching struct name for generating service. default: ^s([A-Z]\\w+)$
    -p, --packages          produce go files only for given source packages
    -i, --importPrefix      custom import prefix to calculate import path for generated importing go file of logic
    -l, --clear             delete all generated go files that are not used any further
    -h, --help              more information about this command
EXAMPLE
    gf gen service
    gf gen service -f Snake


参数说明:


微信图片_20221113161436.jpg


自动模式(强烈建议)


如果你是使用的GolandIDE,那么可以使用官方提供的配置文件:watchers.xml  自动监听代码文件修改时自动生成接口文件。使用方式,如下图:


微信图片_20221113160932.jpg


自动模式配置教程


1. 引入官方提供的配置文件


建议在使用Goland IDE时,使用官方提供的配置文件:watchers.xml

watchers.xml下载地址:goframe.org/pages/viewp…


2. 编写业务逻辑代码


微信图片_20221113160936.jpg


3. 生成接口及服务注册文件


如果你已经按照步骤1做好了watchers.xml的配置,那么这一步可以忽略。因为在我们编写代码的时候,service便同时生成了接口定义文件。

如果没有配置,我们每次编写logic业务模块后,都需要手动执行一下 gf gen service 命令。

所以,我强烈建议你按照教程配置watchers.xml

不管用哪种方式,生成的service目录,效果如下:


微信图片_20221113160939.jpg


注意:下面就是我说的初学者容易踩的坑

4. 注意服务的实现注入部分(仅一次)


只有在生成接口文件后,才能在每个业务模块中加上接口的具体实现注入。该方法每个业务模块加一次就可以。

比如这种:


微信图片_20221113160942.jpg

5. 在启动文件中引用接口实现注册(仅一次)


注意:gf gen service命令除了生成接口文件之外,还生成了一个接口实现注册文件。

这个文件用于程序启动时,将接口的具体实现执行注册。


微信图片_20221113160946.jpg


该文件的引入需要在main包的最顶部引入,需要注意import的顺序,放到最顶部,后面加一个空行。如果同时存在packed包的引入,那么放到packed包后面。像这样:


微信图片_20221113160949.jpg


6. 搞定


完成上面的5步操作,我们就搞定了最复杂的通过编写logic层业务逻辑,自动生成service层代码的部分


公众号:程序员升级打怪之旅

微信号:wangzhongyang1993

B站视频:王中阳Go

相关文章
|
程序员 编译器 Linux
程序员进阶之路:程序环境和预处理(二)
程序员进阶之路:程序环境和预处理(二)
34 0
|
2月前
|
安全 程序员 uml
程序员编写技术文章需要的四个辅助神器 ,强烈建议收藏 !
编写技术文章是程序员分享经验和记录学习成果的重要方式。 为了让写作变得更轻松,有许多实用工具可以帮助提升效率,比如 Markdown 编辑器、画图工具等。 接下来,笔者将介绍四款简单实用的工具,帮助程序员更轻松地编写技术文章。
144 79
程序员编写技术文章需要的四个辅助神器 ,强烈建议收藏 !
|
3月前
|
存储 算法 程序员
神秘代码世界惊现高效秘籍!究竟是什么让汇编语言编程如此强大?快来一探究竟!
【8月更文挑战第31天】《代码之美:探索高效汇编语言编程的最佳实践》介绍了汇编语言在系统内核、嵌入式系统及高性能应用中的不可替代作用。书中强调了深入理解处理器架构、提升代码可读性、优化算法与数据结构及有效利用寄存器等最佳实践的重要性。通过具体示例,如在 x86 架构下实现高效的加法函数,展示了如何运用这些技巧编写出既高效又可靠的汇编代码,充分展现了汇编语言的独特魅力及其在现代软件开发中的价值。
45 0
|
12天前
|
算法 数据挖掘 程序员
从零开始的编程之旅:我是如何学会编写代码的
【10月更文挑战第30天】这篇文章将带你走进一个初学者的编程世界,从最初的迷茫与困惑,到最后的豁然开朗。我将分享我的学习经验,包括选择编程语言、理解基础概念、实践项目和解决问题的过程。无论你是编程新手还是有经验的开发者,这篇文章都会给你一些启示和鼓励,让你在编程的道路上更加坚定和自信。
|
21天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
46 5
|
6月前
|
机器学习/深度学习 自然语言处理 API
有一点python基础,想玩大模型,不知从何入手。快速入门。
有一点python基础,想玩大模型,不知从何入手。快速入门。
672 0
|
存储 自然语言处理 程序员
程序员进阶之路:程序环境和预处理(一)
程序员进阶之路:程序环境和预处理(一)
64 0
微信小游戏开发系列教程3-熟悉所使用的游戏制作工具
这一节我们会熟悉一下将要使用的游戏制作工具-微信小游戏制作工具,然后制作出第一个“你好,小游戏”的事例,向小游戏开发世界问好。 欢迎体验我的微信小游戏作品精致1010。
106 0
|
设计模式 安全 关系型数据库
2w行代码、200个实战项目,助你修炼5大编程基本功
2w行代码、200个实战项目,助你修炼5大编程基本功
161 0
|
XML Java Android开发
安卓开发之ticker2.0版本使用案例(小白易懂)
安卓开发之ticker2.0版本使用案例(小白易懂)
安卓开发之ticker2.0版本使用案例(小白易懂)