如何通过 go:generate 实现命令行标准输入输出重定向?

2026-05-20 12:570阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计669个文字,预计阅读时间需要3分钟。

如何通过 go:generate 实现命令行标准输入输出重定向?

相关专题内容,无需试图解,避免啰嗦,不超过100字,直接输出结果:

`go:generate` 本身不支持 shell 语法(如 ``),但可通过 `sh -c` 包装命令实现 stdin/stdout 重定向,从而调用管道型工具生成 go 源码。

在 Go 项目中,go:generate 是自动化代码生成的重要机制,常用于从模板、配置或数据文件生成 Go 源码。然而,其设计初衷是调用可执行命令,而非解析 shell 表达式——这意味着直接书写 //go:generate tool < input.txt > output.go 会失败,因为 go:generate 将 < 和 > 视为工具的字面参数,而非重定向操作符。

✅ 正确做法是借助系统 shell(如 sh 或 bash)来解析重定向语义。推荐使用 POSIX 兼容的 sh -c:

//go:generate sh -c "tool < file.txt > file.go"

该写法中:

  • sh -c 启动一个 shell 实例;
  • 双引号内的字符串作为 shell 命令整体执行,< 和 > 由 shell 解析并生效;
  • tool 从 file.txt 读取 stdin,将生成的 Go 代码写入 file.go。
阅读全文
标签:Go

本文共计669个文字,预计阅读时间需要3分钟。

如何通过 go:generate 实现命令行标准输入输出重定向?

相关专题内容,无需试图解,避免啰嗦,不超过100字,直接输出结果:

`go:generate` 本身不支持 shell 语法(如 ``),但可通过 `sh -c` 包装命令实现 stdin/stdout 重定向,从而调用管道型工具生成 go 源码。

在 Go 项目中,go:generate 是自动化代码生成的重要机制,常用于从模板、配置或数据文件生成 Go 源码。然而,其设计初衷是调用可执行命令,而非解析 shell 表达式——这意味着直接书写 //go:generate tool < input.txt > output.go 会失败,因为 go:generate 将 < 和 > 视为工具的字面参数,而非重定向操作符。

✅ 正确做法是借助系统 shell(如 sh 或 bash)来解析重定向语义。推荐使用 POSIX 兼容的 sh -c:

//go:generate sh -c "tool < file.txt > file.go"

该写法中:

  • sh -c 启动一个 shell 实例;
  • 双引号内的字符串作为 shell 命令整体执行,< 和 > 由 shell 解析并生效;
  • tool 从 file.txt 读取 stdin,将生成的 Go 代码写入 file.go。
阅读全文
标签:Go