go generate 不支持单引号,参数中含空格时必须使用双引号包裹,否则会被错误分割为多个独立参数,导致后续标志(如 `-data`)丢失或解析异常。
go generate 的参数解析机制与 shell 行为不同:它不调用系统 shell,而是直接按空格和双引号规则进行词法切分(类似 Go 的 strings.FieldsFu

例如,原始写法:
//go:generate myprog -someName thisname -data 'Request: Typ "." callMe, Rsp: MyTyp "." close'
go generate 会将其拆分为以下 7 个独立参数:
myprog -someName thisname -data 'Request: Typ "." ...
注意:'Request: 被当作一个完整 token(含开头单引号),后续内容被截断,-data 后实际未接收到有效值,因此你的程序只收到了 -someName。
✅ 正确写法(使用双引号并转义内部双引号):
//go:generate myprog -someName thisname -data "Request: Typ \".\" callMe, Rsp: MyTyp \".\" close"
⚠️ 注意事项:
总结:go generate 是轻量级、确定性的代码生成调度器,其参数解析刻意规避 shell 复杂性——这既是限制,也是保障可重现性的设计选择。始终用双引号包裹含空格/特殊字符的参数,并规范转义,即可稳定驱动各类生成工具。