王中阳Go

V1

2022/11/14阅读:31主题:橙心

【电商实战02】如何借助工具快速生成代码?初学者容易踩的坑有哪些?

上期回顾

上一篇内容分享了【电商实战01】如何快速编写api层和model层?

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

如果你第一次看我【电商实战】系列的文章,建议先看【电商实战系列】先看这里:适合人群&课程大纲&开源地址&视频合集&一起学习

看过的朋友请忽略,继续往下看

本期重点

使用 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

参数说明:

自动模式(强烈建议)

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

自动模式配置教程

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

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

watchers.xml下载地址:https://goframe.org/pages/viewpage.action?pageId=49770772&preview=/49770772/49770777/watchers.xml

2. 编写业务逻辑代码

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

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

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

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

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

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

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

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

比如这种:

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

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

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

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

6. 搞定

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

跑通业务功能

上面介绍了 gf gen service 的使用,是本期的重点。

另外一个重点就是,我们本期的视频内容带大家跑通了一个业务功能: 完成了管理后台轮播图的接口,欢迎大家收藏文章,找个时间动手实践视频内容:

这是【电商实战】系列的资料汇总,我单独整理成了文章,不占用每期内容的篇幅。

适合人群:

有一定Go基础,想快速上手商业实战项目的伙伴

本期解决的重点问题:

  1. 教你学会如何看文档
  2. 教你学会如何“抄作业”,也就是官方示例,或者其他优秀项目的源码
  3. 教你学会如何用敏捷开发的思路,聚焦实现阶段性的目标

开源地址

  • 这是基于goframe1.16版本已经开发完毕的,完全开源的电商实战项目:https://github.com/wangzhongyang007/goframe-shop

  • 为了避免混乱,最新的电商系统v2版本开启了新的仓库:https://github.com/wangzhongyang007/goframe-shop-v2

我也会带着大家基于Go的最新版本去开发实践电商实战项目,让大家少踩坑,高效学。

视频地址

经过充分考虑和小伙伴们的建议,我决定每期内容都更新文章+视频。

文章的重点是介绍本期会用到的硬核知识点。

视频的作用是带着大家一起,一步一步的去实现商业项目的需求,这样对初学者才友好。

这是本期内容在B站的视频地址:https://www.bilibili.com/video/BV1bt4y1K7Lj/

开发流程

我梳理了GoFrame V2最新版的开发流程:

  1. 设计表结构,初始化项目,修改配置文件
  2. 使用gf gen dao 生成对应的 dao/do/model
  3. 编写api层:定义业务侧数据结构,提供对外接口的输入/输出数据结构
  4. 编写model层:定义数据侧数据结构,提供对内的数据处理的输入/输出数据结构
  5. 编写logic层,自动生成service层代码。(通过配置goland File Watcher自动生成,也可以通过gf gen service手动执行脚本生成,建议前者)
  6. 在service层代码生成RegisterXX()方法后,在对应的logic模块注册服务(每个模块只需要写一次)
  7. 编写controller层,接收/解析用户输入的参数,调用service层的服务。
  8. 注册路由,对外暴露接口,比如这个项目是编写cmd.go文件。
  9. 在main.go中 加入一行 _ "project-name/internal/logic" (只需写一次)
  10. 在main.go中加入一行 _ "github.com/gogf/gf/contrib/drivers/mysql/v2" (如果你使用的是mysql;只需写一次)

其中9、10只需要添加一次; 步骤6每个模块只需要写一次

相关资料

这是我在开发过程中对我帮助很大的资料, 相信对你也会有所帮助:

  • GoFrame V2真香,我是Get到了高内聚低耦合的点,你呢?https://juejin.cn/post/7156119733312438279

  • 官方文档:https://goframe.org/pages/viewpage.action?pageId=57183756

  • 快速开始:https://goframe.org/pages/viewpage.action?pageId=1114399

  • 官方简单示例:https://github.com/gogf/gf-demo-user

  • 官方完整示例:https://github.com/gogf/focus-single

坚持原创输出不易,你的三连是对我最大的支持,感谢评论、点赞、转发!

一起学习

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

微信号:wangzhongyang1993

B站视频:王中阳Go

分类:

后端

标签:

Golang

作者介绍

王中阳Go
V1

专注Go语言的学习经验分享和简历优化