Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Tip |
---|
该功能特性从 |
基本介绍
解决痛点
在开发项目的时候,往往需要先根据业务需求和场景设计API
接口,使用proto
或者golang struct
来设计API
的输入和输出,随后再创建与API
相对应的控制器实现,最后也有可能会提供SDK
(同为Golang
语言条件下)供内/外部服务调用。在开发过程中会遇到以下痛点:
- 重复的代码工作较多。在
API
中创建输入输出定义文件后还需要在控制器目录下创建对应的文件、创建对应的控制器初始化代码、从API
代码中反复拷贝各个输入输出结构名称,在这过程重复的操作比较多。 - API与控制器之间的关联没有可靠规范约束。除了
API
有一定的命名约束外,控制器的创建和方法命名并没有约束,灵活度较高,API
的结构名称与控制器方法名称难以约束对应,当接口越来越多时会有一定维护成本。 - 缺少API的HTTP SDK自动生成工具。当开发完
API
后,往往需要立即给内部或者外部调用,缺少便捷的SDK
生成,需要手动来维护这部分SDK
代码,那么对于调用端来说成本非常高。
命令特性
- 规范关联
API
定义与控制器文件命名、控制器实现方法命名。 - 根据
API
定义自动生成控制器接口、控制器初始化文件及代码、接口初始化代码。 - 根据
API
定义自动生成易于使用的HTTP SDK
代码。 - 支持自动化生成模式:当某个
API
结构定义文件发生变化时,自动增量化更新对应的控制器、SDK
代码。
前置约定
重要的规范
该命令的目的之一是规范化api
代码的编写,那么我们应该有一些重要的规范需要了解(否则生成不了代码哦):
api
层的接口定义文件路径需要满足/api/模块/版本/定义文件.go
,例如:/api/user/v1/user.go
、/api/user/v1/user_delete.go
、etc.api
定义的结构体名称需要满足操作Req
及操作Res
的命名方式。例如:GetReq/GetRes
、GetListReq/GetListRes
、DeleteReq/DeleteRes
、etc.
以下是项目工程模板中的Hello
接口示例:
建议性的命名
我们对一些常用的接口定义做了一些建议性的命名,供大家参考:
操作名称 | 建议命名 | 备注 |
---|---|---|
查询列表 | GetListReq/Res | 通常是从数据库中分页查询数据记录 |
查询详情 | GetOneReq/Res | 通常接口需要传递主键条件,从数据库中查询记录详情 |
创建资源 | CreateReq/Res | 通常是往数据表中插入一条或多条数据记录 |
修改资源 | UpdateReq/Res | 通常是按照一定条件修改数据表中的一条或多条数据记录 |
删除资源 | DeleteReq/Res | 通常是按照一定条件删除数据表中的一条或多条数据记录 |
命令使用
该命令通过分析给定的api
接口定义目录下的代码,自动生成对应的控制器/SDK Go
代码文件。
手动模式
如果是手动执行命令行,直接在项目根目录下执行 gf gen ctrl
即可,她将完整扫描api
接口定义目录,并生成对应代码。
Code Block | ||
---|---|---|
| ||
$ gf gen ctrl -h USAGE gf gen ctrl [OPTION] OPTION -s, --srcFolder source folder path to be parsed. default: api -d, --dstFolder destination folder path storing automatically generated go files. default: internal/controller -w, --watchFile used in file watcher, it re-generates go files only if given file is under srcFolder -k, --sdkPath also generate SDK go files for api definitions to specified directory -v, --sdkStdVersion use standard version prefix for generated sdk request path -n, --sdkNoV1 do not add version suffix for interface module name if version is v1 -h, --help more information about this command EXAMPLE gf gen ctrl |
Tip |
---|
如果使用框架推荐的项目工程脚手架,并且系统安装了 |
参数说明:
名称 | 必须 | 默认值 | 含义 |
---|---|---|---|
srcFolder | 否 | api | 指向api 接口定义文件目录地址 |
dstFolder | 否 | internal/controller | 指向生成的控制器文件存放目录 |
watchFile | 否 | 用在IDE的文件监控中,用于根据当文件发生变化时自动执行生成操作 | |
sdkPath | 否 | 如果需要生成HTTP SDK ,该参数用于指定生成的SDK代码目录存放路径 | |
sdkStdVersion | 否 | 生成的 | |
sdksdkNoV1 | 否 | 生成的HTTP SDK 中,当接口为v1 版本时,接口模块名称是否不带V1 后缀。 |
自动模式(推荐)
如果您是使用的GolandIDE
,那么可以使用我们提供的配置文件:watchers.xml 自动监听代码文件修改时自动生成接口文件。使用方式,如下图:
使用示例
自动生成的接口定义文件
自动生成的控制器代码文件
自动生成的HTTP SDK
代码文件
Panel | ||
---|---|---|
| ||
|