首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"go generate“多行命令

"go generate“多行命令
EN

Stack Overflow用户
提问于 2019-04-09 18:18:17
回答 2查看 5K关注 0票数 8

在编译代码之前,我试图使用//go:generate运行外部工具,而且由于需要传递一定数量的参数,代码行变得相当长。

似乎没有办法编写多行go:generate命令,对吗?是否有其他办法?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 09:10:08

没有办法将go generate命令拆分成几行,但是有一些提示。

如果您需要运行多个短命令,您可以一个接一个地编写它们,如下所示。

代码语言:javascript
复制
//go:generate echo command A
//go:generate echo command B
//go:generate ls

您还应该知道,没有bash脚本,而是一个原始命令。因此,下面的工作不像你所期望的那样。

代码语言:javascript
复制
//go:generate echo something | tr a-z A-Z > into_file
// result in "something | tr a-z A-Z > into_file"

对于长或复杂的命令,您应该使用单独的脚本(或者go程序)来调用go:generate。

代码语言:javascript
复制
//go:generate sh generate.sh
//go:generate go run generator.go arg-A arg-B

在generator.go中,您应该使用build标记来防止它与其他文件一起进行正常编译。

代码语言:javascript
复制
// +build ignore

package main
// ...

学习go最好的地方是go源:https://github.com/golang/go/blob/master/src/runtime/runtime.go#L13

票数 8
EN

Stack Overflow用户

发布于 2021-08-05 03:27:26

这远非理想的解决方案,但您可以使用表单的指令。

代码语言:javascript
复制
//go:generate -command <alias> <command-with-parameters>

上面的指令仅对当前源文件的其余部分指定<alias>等效于命令<command-with-parameters>

这个方法在您的情况下可能是有用的,因为您提到需要传递一定数量的参数(我假设有很多参数)。您可能会使用它来模拟单行中断。我说单是因为嵌套别名不起作用(至少现在是这样)。

举个例子:

代码语言:javascript
复制
//go:generate BAKE "ramen"


  // The above go:generate directive does NOT work, unless:
  //  - You somehow have bake on your path.
  //  - You did a `//go:generate -command BAKE ...`


/* Now, assuming you have a command `kitchen-tools` with lots of possible parameters... */

//go:generate -command BAKE kitchen-tools -appliance=sun -temp=5800K -time=1ns 
//go:generate BAKE -panic=if-burnt -safety=fire_extinguisher,mitts "fresh pizza"


  // The previous //go:generate line runs the following command:
  //  kitchen-tools -appliance=sun -temp=5800K -time=1ns -panic=always -safety=fire_extinguisher,mitts "fresh pizza"

/* BAKE can be used as many times as necessary for the rest of the file. For instance... */

//go:generate BAKE -no-return -unsafe "grand piano"

此外,我建议您使用构建标记generate (而不是类似于ignore),因为go生成工具在检查文件时设置了构建标记generate

代码语言:javascript
复制
// +build generate

package main
// ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55598931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档