新聞中心
?使用 gen service 自動(dòng)生成代碼
注意:該功能特性從goframe v2.1版本開始提供。

基本介紹
設(shè)計(jì)背景
在業(yè)務(wù)項(xiàng)目實(shí)踐中,業(yè)務(wù)邏輯封裝往往是最復(fù)雜的部分,同時(shí),業(yè)務(wù)模塊之間的依賴十分復(fù)雜、邊界模糊,無法采用Golang包管理的形式。
如何有效管理項(xiàng)目中的業(yè)務(wù)邏輯封裝部分呢?對(duì)于每個(gè)采用Golang開發(fā)的項(xiàng)目都是必定會(huì)遇到的難題。
設(shè)計(jì)目標(biāo)
增加logic分類目錄,將所有業(yè)務(wù)邏輯代碼遷移到logic分類目錄下,采用包管理形式來管理業(yè)務(wù)模塊。
業(yè)務(wù)模塊之間的依賴通過接口化解耦,將原有的service分類調(diào)整為接口目錄。這樣每個(gè)業(yè)務(wù)模塊將會(huì)各自維護(hù)、更加靈活。
可以按照一定的項(xiàng)目規(guī)范,從logic業(yè)務(wù)邏輯代碼生成service接口定義代碼。
同時(shí),也允許人工維護(hù)這部分service接口。
命令使用
gf gen service命令通過分析給定的logic業(yè)務(wù)邏輯模塊目錄下的代碼,自動(dòng)生成service目錄接口代碼。
需要注意:
- 由于該命令是根據(jù)業(yè)務(wù)模塊生成service接口,因此只會(huì)解析二級(jí)目錄下的go代碼文件,并不會(huì)無限遞歸分析代碼文件。以logic目錄為例,該命令只會(huì)解析logic/xxx/*.go文件。因此,需要logic層代碼結(jié)構(gòu)滿足一定規(guī)范。
- 不同業(yè)務(wù)模塊中定義的結(jié)構(gòu)體名稱在生成的service接口名稱時(shí)可能會(huì)重復(fù)覆蓋,因此需要在設(shè)計(jì)業(yè)務(wù)模塊時(shí)保證名稱不能沖突。手動(dòng)模式
手動(dòng)執(zhí)行(不建議)
如果是手動(dòng)執(zhí)行命令行,直接在項(xiàng)目根目錄下執(zhí)行 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
參數(shù)說明:
自動(dòng)模式(強(qiáng)烈建議)
如果你是使用的GolandIDE,那么可以使用官方提供的配置文件:watchers.xml
自動(dòng)模式配置教程
1. 引入官方提供的配置文件
建議在使用Goland IDE時(shí),使用官方提供的配置文件:watchers.xml
watchers.xml下載地址:https://goframe.org/pages/viewpage.action?pageId=49770772&preview=/49770772/49770777/watchers.xml
2. 編寫業(yè)務(wù)邏輯代碼
3. 生成接口及服務(wù)注冊(cè)文件
如果你已經(jīng)按照步驟1做好了watchers.xml的配置,那么這一步可以忽略。因?yàn)樵谖覀兙帉懘a的時(shí)候,service便同時(shí)生成了接口定義文件。
如果沒有配置,我們每次編寫logic業(yè)務(wù)模塊后,都需要手動(dòng)執(zhí)行一下 gf gen service 命令。
所以,我強(qiáng)烈建議你按照教程配置watchers.xml
不管用哪種方式,生成的service目錄,效果如下:
注意:下面就是我說的初學(xué)者容易踩的坑
4. 注意服務(wù)的實(shí)現(xiàn)注入部分(僅一次)
只有在生成接口文件后,才能在每個(gè)業(yè)務(wù)模塊中加上接口的具體實(shí)現(xiàn)注入。該方法每個(gè)業(yè)務(wù)模塊加一次就可以。
比如這種:
5. 在啟動(dòng)文件中引用接口實(shí)現(xiàn)注冊(cè)(僅一次)
注意:gf gen service命令除了生成接口文件之外,還生成了一個(gè)接口實(shí)現(xiàn)注冊(cè)文件。
這個(gè)文件用于程序啟動(dòng)時(shí),將接口的具體實(shí)現(xiàn)執(zhí)行注冊(cè)。
該文件的引入需要在main包的最頂部引入,需要注意import的順序,放到最頂部,后面加一個(gè)空行。如果同時(shí)存在packed包的引入,那么放到packed包后面。像這樣:
6. 搞定
完成上面的5步操作,我們就搞定了初學(xué)者容易踩坑的:通過編寫logic層業(yè)務(wù)邏輯,自動(dòng)生成service層代碼部分
跑通業(yè)務(wù)功能
上面介紹了 gf gen service 的使用,是本期的重點(diǎn)。
本文轉(zhuǎn)載自微信公眾號(hào)「 程序員升級(jí)打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關(guān)注。
轉(zhuǎn)載本文請(qǐng)聯(lián)系「 程序員升級(jí)打怪之旅」公眾號(hào)。
分享名稱:如何借助工具快速生成代碼?新手容易踩的這些坑一定要避開
新聞來源:http://www.dlmjj.cn/article/cogpopj.html


咨詢
建站咨詢
