是否有一种方法可以让go generate跳过未更改的文件/ pkg



是否有一种简单的方法来运行go generate ./…如果PKG中所有调用生成的文件都没有改变-那就跳过再次生成这个文件?(原因是生成的时间消耗)例如:

-a (directory)
example1.go //contain //go:generate -output generated_example1.go
example2.go //contain //go:generate -output generated_example2.go
...

假设我要生成7个文件,我只修改了文件example1.go所以当我运行go generate ./…我希望它不会尝试生成所有7个文件,而只生成example1,因为只有这个源更改了

(调用从内部目录生成的go不能解决这个问题,因为有几个文件要从同一个目录生成。)

不支持。使用go generate运行的工具(命令)可能支持这一点。请参阅相关内容:如何仅为更改的模板运行go generate ?

一些推理:go generate可能用于运行任意工具,而不仅仅是源代码生成/操作工具,并且再次运行可能不会产生相同的输出/副作用。此外,运行工具可能会失败,并且go generate不保留成功/失败运行的数据库,在这种情况下,即使源文件没有更改,它也不知道再次运行哪些命令。

总之,您的工具应该检查所需的输出文件(及其版本)是否存在,以决定是否需要(重新)生成。这比人们想象的要简单:由于生成在源文件更改之后运行,因此比较最后修改的时间戳就足够了。如果源(包含//go:generate)具有较新的时间戳,则应该运行生成。否则可以跳过。注意,go generate$GOFILEenv var设置为触发该命令的文件的基本名称,因此很容易检查。

最新更新