如何通过 gogenerate 传递参数

Em *_* Ae 3 go generate

这是我的项目的结构

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmd\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 orders\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 scripts\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 codegenerator.go\n
Run Code Online (Sandbox Code Playgroud)\n\n

codegenerator.go文件是我放置代码以生成代码的文件。这是逻辑codegenerator.go

\n\n
    \n
  • 重命名main.goold_main.go
  • \n
  • 逐行读取old_main.go并写入一个名为的新文件main.go
  • \n
  • 根据标记/占位符插入新行/代码块main.go
  • \n
  • 删除old_main.go文件
  • \n
\n\n

go:generate指令位于main.go这样的

\n\n
//go:generate go run ../../scripts/codegenerator.go\n
Run Code Online (Sandbox Code Playgroud)\n\n

go generate从命令行运行并想传递 3 个参数,以便它们可以在codegenerator.go. 这是我的命令和我得到的错误(我在路径上执行了这个命令cmd/orders

\n\n
 $ go generate arg_one arg_two arg_three\ncan\'t load package: package arg_one: unknown import path "arg_one": cannot find module providing package arg_one\ncan\'t load package: package arg_two: unknown import path "arg_two": cannot find module providing package arg_two\ncan\'t load package: package arg_three: unknown import path "arg_three": cannot find module providing package arg_three\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以问题是

\n\n
    \n
  1. 我跑步go generate正常吗?
  2. \n
  3. 我如何将参数从命令行传递go generate到目标脚本
  4. \n
\n

sbe*_*rry 5

虽然我同意您最好使用其他解决方案,但没有任何东西可以阻止使用环境变量(操作系统细节可能会有所不同)

\n\n
\xe2\x9e\x9c  /tmp cat foo.go\n\npackage main\n\n//go:generate python run.py $ARG\n\nfunc main() {}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\xe2\x9e\x9c  /tmp cat run.py\nimport sys\n\nprint sys.argv[1]\n
Run Code Online (Sandbox Code Playgroud)\n\n
\xe2\x9e\x9c  /tmp ARG=poop go generate foo.go\npoop\n
Run Code Online (Sandbox Code Playgroud)\n