如何仅针对更改的模板运行 gogenerate?

2024-01-05

我们在仓库中使用一些代码模板,并且我们依赖go:generate从这些模板生成所有需要的代码。
由于有多个模板,并且我们从每个模板生成多个实际代码,因此生成代码的一致性已成为一个问题:我们需要一个命令来运行并确保所有生成的代码与其相应的模板都是最新的。为此,我们有一个简单的 bash 命令来查找所有具有以下内容的文件go:generate在其中,并运行go generate在他们的目录中。
问题是这种方法真的很慢:大多数模板都没有改变,所以不需要再次生成它们的代码。
有什么办法可以告诉go generate仅当模板比文件新时才运行?或者说,除此之外还有其他更好的方法吗?
非常感谢。


首先,您不需要查找的 bash 脚本go:generate在文件中,go工具本身可以为您做到这一点。只需使用

go generate ./...

在子文件夹中递归。

接下来,当代码生成运行时,我会将模板文件的上次修改时间戳存储在生成的代码中,无论是在注释中还是在 const / var 中。运行的应用程序go generate可以首先检查模板的最后修改时间是否比代码中存储的时间更新,如果是则继续。

这个文件的最后修改时间应该足够了。但是,如果由于某种原因您不能依赖它,模板可能有一个“版本”,当模板更改时,该版本应该增加。并使生成器将此版本“传输”到最终代码中,这可用于检查模板是否比从其生成的代码新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅针对更改的模板运行 gogenerate? 的相关文章

  • 如何在golang中创建一个充满“000000...”数据的10MB文件?

    我打算在日志或磁盘队列等系统中使用 fdatasync 首先是在 ext4 等文件系统中创建一个带有 000000 的 10MB 文件 但我不知道如何正确地做到这一点 jnml fsc r630 src tmp SO 16797380 ls
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • 如何关闭 gorm 1.20.0 中的数据库实例

    由于我没有在 Close 函数中找到 gorm 实例 任何帮助将不胜感激 dbURI fmt Sprintf user s password s dbname s port s sslmode s TimeZone s username p
  • 在 Go 中,如何将结构体转换为字节数组?

    我有一个我定义的结构实例 我想将其转换为字节数组 我尝试了 byte my struct 但这不起作用 另外 我还被指出二进制包 http golang org pkg encoding binary 但我不确定我应该使用哪个函数以及应该如
  • 错误:标准包中非标准导入“gopkg.in/yaml.v2”

    我正在尝试从以下位置导入 go yamlhttps github com go yaml yaml https github com go yaml yaml 并且我发现了一个 Google 没有提供帮助的错误 I ran go get g
  • golang无法启动调试,显示未找到框架CoreFoundation

    我使用的是 Macbook pro m1 在数据迁移或更新到 monterey 后 不确定是什么原因导致的 golang 似乎无法调试或 go list 编译 我尝试重新安装 更新 golang 结果是一样的 Go版本 1 17 3 dar
  • 在复杂的文件夹结构中进行测试

    我正在 golang 中构建一个设计模式存储库 为了运行所有测试 我使用这个 bash 脚本 有用 bin bash go test creational abstract factory go go test creational bui
  • 当使用 k8s.io/client-go 库的 kubernetes 部署发生更改时获得通知的最佳方式是什么?

    Context 我正在编写一个使用k8s io client go https github com kubernetes client go 图书馆 这里是 godocs https godoc org k8s io client go
  • 指针上定义的方法仍然可以用值调用

    Effective Go 文档说明如下 关于接收者的指针与值的规则是 可以在指针和值上调用值方法 但只能在指针上调用指针方法 http tip golang org doc effective go html pointers vs val
  • 将中间件与 Golang Gorilla mux 子路由器结合使用

    如何将中间件应用到 Go 中大猩猩工具包 http www gorillatoolkit org 多路复用器子路由器 我有以下代码 router mux NewRouter StrictSlash true apiRouter router
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • Golang const unsafe.Sizeof

    不明白为什么我可以做到 const OK uint64 0 const OK int unsafe Sizeof uint64 0 但不是这个 const NOK binary Size uint64 0 它的解释在规格 https gol
  • 如何通过在切片上查找来从切片复制到数组

    我正在编写一个库来处理二进制格式 我有一个带有数组变量的结构 我想保留它以用于文档目的 我还需要从输入字节片中查找和判断 一些伪代码 type foo struct boo 5 byte coo 3 byte func main input
  • 如何在golang中获得两个切片的交集?

    Go 中有没有有效的方法来获取两个切片的交集 我想避免嵌套 for 循环之类的解决方案slice1 string foo bar hello slice2 string foo bar intersection slice1 slice2
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • 如何在 Go 中使用与包同名的变量名?

    文件或目录的常见变量名称是 path 不幸的是 这也是 Go 中包的名称 此外 在 DoIt 中更改路径作为参数名称 如何编译此代码 package main import path os func main DoIt file txt f
  • Golang:如何在HTTP客户端的TLS配置中指定证书

    我有一个证书文件 该位置是 usr abc my crt我想将该证书用于我的 tls 配置 以便我的 http 客户端在与其他服务器通信时使用该证书 我当前的代码如下 mTLSConfig tls Config CipherSuites u
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P

随机推荐

  • 如何在 WPF KeyDown 事件中正确检索修饰键?

    我看过很多建议使用的答案Keyboard Modifiers来确定是否KeyDown事件适用于设置了修饰符的键 不幸的是 因为Keyboard Modifiers返回current修改器的状态 而不是按下按键时修改器的状态 这会导致快速打字
  • 从 Perl 中的文本文件读取时跳过标题的最佳方法?

    我正在 Perl 中从制表符界定的文件中获取几列 文件的第一行与其他行完全不同 因此我想尽可能快速有效地跳过该行 这是我到目前为止所拥有的 my firstLine 1 while
  • Promise 的resolve 和reject 函数的返回类型是什么?

    我试图找到我用 typescript 创建的 Promise 的解析和拒绝函数的返回类型 以便 tslint 不会根据 typedef 规则进行抱怨 这是代码 承诺 ts const promise Promise
  • JSON 对象通过 jQuery post 到 php

    我知道 有很多问题 但没有一个对我有用 我用 javascript 中的普通 javascript 对象构建了一个数组 并通过jquery post到服务器 但是在服务器上 我无法使用访问数据php obj gt value 我试过json
  • HTML 右浮动元素顺序

    如果我有三个向右浮动的元素 为什么顺序如下 请参阅 jsfiddle 元素 1 是右侧的第一个元素 而元素 3 实际上是最后一个元素 现在下单了 3 2 1 但元素在html中是按这个顺序排列的 1 2 3 Why http jsfiddl
  • 如何使用反应本机图像选择器添加多个图像

    我正在构建一个简单的社交媒体应用程序 用户可以添加状态 位置 来自 YouTube 的视频和照片 但我在使用反应本机图像选择器上传多个图像时遇到问题 我已阅读文档但不知道如何解决问题 这是我的功能代码 onPhotoPress const
  • Scala 相当于 new HashSet(Collection)

    等效的 Scala 构造函数是什么 创建一个不可变的 HashSet 到 Java new HashSet
  • 如何从 PythonGDB (GDB 7.1) 中的 gdb.execute 获取输出?

    我目前正在编写一个Python GDB 脚本 问题是它必须与 GDB 7 1 兼容 因此 我首先为 GDB 7 3 1 编写了脚本 并使用以下函数来接收 gdb 命令 GDB 7 3 1 的输出 myvar gdb execute info
  • 通过属性获取元素

    我会很短 据我所知 watir 库提供了两种获取 html 元素的方法 几乎对于每个元素 div button table li 等 watir 都提供了两种方法 一种是 单一 方法 仅获取一个特定元素 例如 watir instance
  • 为什么“[x]y”在 RTL 方向显示不正确?

    div x y div 您可以看到 HTML 文本 x y显示为x y 造成这个结果的原因是什么 PS 我在 Chrome 56 0 2924 87 64 位 中得到了这个结果 我无法告诉你原因 但我可以告诉你如何解决它 添加unicode
  • 禁用按钮上的 Jquery UI 工具提示

    我正在尝试显示禁用按钮的工具提示 我不确定 jquery 事件是否会针对禁用元素触发 但我正在尝试检查是否可以显示禁用项目的工具提示 我的例子是here http jsfiddle net jkLzuh0o 1 p Your age p
  • 如何在 Angular 4 中切换(显示/隐藏)元素?

    这是我的 html 元素
  • Sentry/NLog 集成未记录到 Sentry

    我正在使用最新的 Sentry NLog 软件包 如下所示 但由于某种原因 我的错误开始记录到 NLog 而不是 Sentry 我可以看到 Sentry 正在初始化 但它从不记录任何内容 同时 错误会毫无问题地记录到 NLog 中 这些是我
  • 如何使用 python-pptx 复制幻灯片?

    如何复制幻灯片 我创建了一个模板幻灯片 我需要复制它并分别编辑每个副本的形状 或者我如何将模板幻灯片添加到presentation slide layouts 这是我在 GitHub 上找到的 它对我有用 我确实为我的项目改变了一些东西 您
  • 当溢出:隐藏在内联块上使用时,容器上方和下方的 CSS 神秘空白

    当我使用overflow hidden 顶部和底部边距出现在这些容器周围 我真的不明白为什么会这样 我正在寻找一个解释来帮助我更好地理解 CSS 这是代码 CSS代码 container border 2px solid black ove
  • 以 HTML5 形式显示 JavaScript 中的错误

    我有一个包含必填字段的 HTML5 表单
  • Wix MajorUpgrade 不会检测产品版本的最后位置

    我正在尝试配置我的 Wix Toolkit 安装程序来处理我的 Visual Studio 应用程序的升级
  • 当列的顺序不同时创建 UNION ALL 查询

    我有 600 个表要执行UNION ALL查询于 不幸的是 每个表中列的顺序各不相同 但它们始终具有相同的名称 例如 Table 1 Item Cost ID Code Location Table 2 Cost Id Code Locat
  • Javascript:如何从数组中清除未定义的值

    我正在尝试循环遍历一个数组并删除并跳过元素 直到仅存在一个元素 我尝试过拼接 但它弄乱了我的循环 因为 arr 1 中的元素随后变成了 arr 0 等 假设有 10 个人 我想删除 1 号人员 保留 2 号人员 然后删除 3 号人员 保留
  • 如何仅针对更改的模板运行 gogenerate?

    我们在仓库中使用一些代码模板 并且我们依赖go generate从这些模板生成所有需要的代码 由于有多个模板 并且我们从每个模板生成多个实际代码 因此生成代码的一致性已成为一个问题 我们需要一个命令来运行并确保所有生成的代码与其相应的模板都