我们在仓库中使用一些代码模板,并且我们依赖go:generate
从这些模板生成所有需要的代码。
由于有多个模板,并且我们从每个模板生成多个实际代码,因此生成代码的一致性已成为一个问题:我们需要一个命令来运行并确保所有生成的代码与其相应的模板都是最新的。为此,我们有一个简单的 bash 命令来查找所有具有以下内容的文件go:generate
在其中,并运行go generate
在他们的目录中。
问题是这种方法真的很慢:大多数模板都没有改变,所以不需要再次生成它们的代码。
有什么办法可以告诉go generate
仅当模板比文件新时才运行?或者说,除此之外还有其他更好的方法吗?
非常感谢。
首先,您不需要查找的 bash 脚本go:generate
在文件中,go
工具本身可以为您做到这一点。只需使用
go generate ./...
在子文件夹中递归。
接下来,当代码生成运行时,我会将模板文件的上次修改时间戳存储在生成的代码中,无论是在注释中还是在 const / var 中。运行的应用程序go generate
可以首先检查模板的最后修改时间是否比代码中存储的时间更新,如果是则继续。
这个文件的最后修改时间应该足够了。但是,如果由于某种原因您不能依赖它,模板可能有一个“版本”,当模板更改时,该版本应该增加。并使生成器将此版本“传输”到最终代码中,这可用于检查模板是否比从其生成的代码新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)