说明
implgen
用于通过 interface
定义生成 Go
接口空白实现代码的工具。
用于减少开发人员工作量,将机械式的复制粘贴代码交由工具来实现,提升工作效率。
安装说明
1. 通过源码安装
- 执行命令通过源码安装:
go get github.com/ssoor/implgen
- 执行命令检查输出来验证安装结果:
implgen --help
2. 使用 gex
安装
gex
是用来管理项目工具类依赖项的工具。
通过使用
gex
可以清晰的说明代码都依赖于哪些工具,并在使用时自动拉取和安装相应的工具,从而避免了开发人员不清楚项目依赖哪些第三方工具,以及切换开发环境需要逐个安装工具的问题。
- 执行命令通过源码安装
gex
:
go get github.com/izumin5210/gex/cmd/gex
- 执行命令添加
implgen
工具依赖:
gex --add github.com/golang/mock/mockgen
- 执行命令检查输出验证安装结果:
gex implgen --help
使用说明
1. 使用示例
- 编写服务定义为见,并将文件存储到
/foo_infa.go
:
package main
//go:generate gex implgen -destination impl/foo_service.go -package impl -source foo_infa.go
// 接口说明
type Foo interface {
// 接口方法说明1
Bar(x int) int // 接口方法说明2
}
- 执行命令调用工具生成代码:
go generate ./...
- 命令执行成功后会输出生成内容到文件
/impl/foo_service.go
,具体内容如下:
// Code generated by ImplGen.
// Source: foo_infa.go
package impl
// 接口说明
type Foo struct {
}
// 接口说明
func NewFoo() *Foo {
implObj := &Foo{}
// TODO: NewFoo() Not implemented
return implObj
}
// 接口方法说明1
func (m *Foo) Bar(x int) int { // 接口方法说明2
// TODO: Foo.Bar(x int) int Not implemented
panic("Foo.Bar(x int) int Not implemented")
}
2. 参数说明
查看命令所支持的参数:
implgen --help
参数列表:
-source string
接口定义文件/源文件,工具根据源文件生成输出结果-destination string
指定输出文件路径,默认将内容输出到控制台-package string
代码生成的包名package <包名>
-mock_names string
传参为逗号分隔的intefaceName=implementName
对,用来指定接口生成的结构名。默认名会根据interfaceName
生成,如果interfaceName
后缀为Interface
则删除Interface
后缀后作为名称,如果没有Interface
后缀就直接使用interfaceName
-version
打印版本信息-debug_parser bool
打印解析器解析结果后就退出
其他
使用 VSCode
的话可以通过安装 Todo Tree
来查看还有哪些方法没有实现。
https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree
插件会列出来所有 TODO
注释,方便开发人员快速定位。