Windows系统下Golang开发如何向mage命令传递参数
Windows环境下Golang开发mage命令正确传参方法
报错原因
执行mage -v getXXXXXXX --ENV=dev返回unspecified target --ENV错误,核心原因是mage的参数解析规则:默认情况下所有传入参数会被优先识别为待执行的构建目标名称,只有特殊分隔符之后的内容,才会被判定为传给目标函数的自定义参数。直接把--ENV=dev跟在目标名后面时,mage会把它当成名为--ENV=dev的构建目标去查找,找不到就会抛出对应错误。
正确传参规则
- 所有要传给mage目标函数的自定义参数,必须放在双横线分隔符
--之后;分隔符要放在mage自身参数、待执行目标名的后面,分隔符后的所有内容不会被mage解析为构建目标,会直接透传给对应的目标函数。 - Windows全终端(cmd、PowerShell)通用的正确命令写法:
mage -v getXXXXXXX -- --ENV=dev
Windows环境使用注意事项
- 传递带空格、特殊字符的参数时,一律用双引号包裹参数值,不要用单引号(Windows终端默认不识别单引号的字符串边界),示例:
mage -v getXXXXXXX -- --ENV=prod --outputPath="C:\Users\XXX\My Project\dist" - 如果在PowerShell中遇到参数被意外转义的问题,可以在mage参数前加
--%停止PowerShell的默认参数解析,示例:mage -v --% getXXXXXXX -- --ENV=dev
magefile侧参数接收方式
编写mage构建脚本时,可通过两种方式接收传入参数:
- 直接给目标函数定义对应入参,mage会自动匹配绑定参数值
//go:build mage package main import "fmt" // 对应mage getXXXXXXX执行目标 func GetXXXXXXX(ENV string) { fmt.Printf("当前运行环境: %s\n", ENV) }
- 直接通过
os.Args获取分隔符后透传的所有自定义参数,自行完成解析。
双横线分隔符传参为mage的通用规则,并非Windows专属,Linux、macOS环境下传自定义参数也需要遵守该规则。
内容的提问来源于stack exchange,提问作者sayali
相关产品推荐
相关产品推荐

