如何仅针对更改的模板运行 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 服务器访问文件夹中的文件

    我在 golang 中有一个服务器可以处理这样的文件夹路径 fs http FileServer http Dir assets http Handle Images fs http ListenAndServe 8000 nil 但在这个
  • 在 Go 中,如何将函数的 stdout 捕获到字符串中?

    例如 在 Python 中 我可以执行以下操作 realout sys stdout sys stdout StringIO StringIO some function prints to stdout get captured in t
  • golang sql 驱动程序的准备语句

    关于golang的sql driver 下面两条语句有什么区别 store DB is sql DB type rows err store DB Query SQL args err nil defer rows Close and st
  • 从 Go Slice 中选择一个随机值

    情况 我有一些值 需要从中随机选择一个值 然后我想将它与固定字符串连接起来 到目前为止 这是我的代码 func main create the reasons slice and append reasons to it reasons m
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程
  • Golang、mysql:错误1040:连接过多

    我正在使用 github com go sql driver mysql 驱动程序 我打开一个数据库 db err sql Open mysql str 然后我有两个函数 每个函数被调用 200 次 并使用以下 mysql 代码 rows
  • java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.type。使用 apache beam Spark runner 运行 go 示例时

    我想跑grades https github com apache beam tree master sdks go examples gradesapache beam go sdk 提出的示例 在一个主服务器和两个从服务器 spark2
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • Go MSSQL 连接

    如何提供 MSSQL 连接 它说它始终与代码相关 即使信息不正确 也不会报错 package main import database sql fmt github com denisenkom go mssqldb log var ser
  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • 按引用或按值扫描功能

    我有以下代码 statement SELECT id from source where mgmt 1 var exists string errUnique dr db QueryRow statement mgmt Scan exist
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器
  • Golang中如何获得100%的代码覆盖率? [复制]

    这个问题在这里已经有答案了 我无法获得 100 的代码覆盖率 因为我无法在 Golang 中测试 Fatals 我发现了一些问答 包括this one https stackoverflow com questions 30688554 h
  • 我应该避免在 golang 中使用单例包吗?

    现在我有一个包裹store包含以下内容 package store var db Database func Open url string error open db connection func FindAll model inter

随机推荐

  • 如何在 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从这些模板生成所有需要的代码 由于有多个模板 并且我们从每个模板生成多个实际代码 因此生成代码的一致性已成为一个问题 我们需要一个命令来运行并确保所有生成的代码与其相应的模板都