在编译代码之前,我试图使用//go:generate运行外部工具,而且由于需要传递一定数量的参数,代码行变得相当长。
似乎没有办法编写多行go:generate命令,对吗?是否有其他办法?
谢谢
发布于 2019-04-10 09:10:08
没有办法将go generate命令拆分成几行,但是有一些提示。
如果您需要运行多个短命令,您可以一个接一个地编写它们,如下所示。
//go:generate echo command A
//go:generate echo command B
//go:generate ls您还应该知道,没有bash脚本,而是一个原始命令。因此,下面的工作不像你所期望的那样。
//go:generate echo something | tr a-z A-Z > into_file
// result in "something | tr a-z A-Z > into_file"对于长或复杂的命令,您应该使用单独的脚本(或者go程序)来调用go:generate。
//go:generate sh generate.sh
//go:generate go run generator.go arg-A arg-B在generator.go中,您应该使用build标记来防止它与其他文件一起进行正常编译。
// +build ignore
package main
// ...学习go最好的地方是go源:https://github.com/golang/go/blob/master/src/runtime/runtime.go#L13
发布于 2021-08-05 03:27:26
这远非理想的解决方案,但您可以使用表单的指令。
//go:generate -command <alias> <command-with-parameters>上面的指令仅对当前源文件的其余部分指定<alias>等效于命令<command-with-parameters>。
这个方法在您的情况下可能是有用的,因为您提到需要传递一定数量的参数(我假设有很多参数)。您可能会使用它来模拟单行中断。我说单是因为嵌套别名不起作用(至少现在是这样)。
举个例子:
//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:
// +build generate
package main
// ...https://stackoverflow.com/questions/55598931
复制相似问题