Golang 根据 interface 接口定义直接生成空白实现代码和注释,避免大量的复制粘贴

说明

implgen 用于通过 interface 定义生成 Go 接口空白实现代码的工具。
用于减少开发人员工作量,将机械式的复制粘贴代码交由工具来实现,提升工作效率。

安装说明

1. 通过源码安装

  1. 执行命令通过源码安装:
go get github.com/ssoor/implgen
  1. 执行命令检查输出来验证安装结果:
implgen --help

2. 使用 gex 安装

gex 是用来管理项目工具类依赖项的工具。

通过使用 gex 可以清晰的说明代码都依赖于哪些工具,并在使用时自动拉取和安装相应的工具,从而避免了开发人员不清楚项目依赖哪些第三方工具,以及切换开发环境需要逐个安装工具的问题。

  1. 执行命令通过源码安装 gex:
go get github.com/izumin5210/gex/cmd/gex
  1. 执行命令添加 implgen 工具依赖:
gex --add github.com/golang/mock/mockgen
  1. 执行命令检查输出验证安装结果:
gex implgen --help

使用说明

1. 使用示例

  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
}
  1. 执行命令调用工具生成代码:
go generate ./...
  1. 命令执行成功后会输出生成内容到文件 /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
Golang 根据 interface 接口定义直接生成空白实现代码和注释,避免大量的复制粘贴_第1张图片
插件会列出来所有 TODO 注释,方便开发人员快速定位。
Golang 根据 interface 接口定义直接生成空白实现代码和注释,避免大量的复制粘贴_第2张图片

你可能感兴趣的:(golang,micro,微服务,golang,interface,生成,代码生成,generate)