使用envoy proxy validator与gogo protobuf生成Go校验文件报错如何解决
protoc命令执行报错解决方案
第一次报错(command not found)原因
- 多行shell命令续行要求每一行末尾必须加英文半角反斜杠
\,且反斜杠后不能存在任何空白字符(空格、制表符等)。你最初的命令里protoc-gen-validate@v0.1.0所在行末尾未加续行符,--validate_out行的反斜杠被中文引号包裹导致失效,shell将下一行的参数识别为独立命令,触发报错。
第二次报错(Unknown flag: -?)原因
- 调整后的命令多处使用了全角破折号
—-,而非protoc要求的英文半角双短横--,比如-—go_out、—-validate_out的前缀均为全角字符,shell无法识别为参数前缀,触发未知标志报错。 - 命令中混用了HTML转义引号
"、中文弯引号“,不符合shell语法要求。
修正后的可用命令
首先提前创建输出目录:
mkdir -p ./generated
再执行protoc命令:
protoc \ --proto_path=${GOPATH}/src \ --proto_path=${GOPATH}/pkg/mod/github.com/gogo/protobuf@v1.3.2 \ --proto_path=${GOPATH}/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v0.1.0 \ --proto_path=. \ --gogo_out=. \ --go_out=./generated \ --validate_out="lang=go:./generated" \ --govalidators_out=gogoimport=true:. \ proto/test.proto
额外校验项
- 确认
protoc-gen-gogo、protoc-gen-validate、protoc-gen-govalidators三个插件已安装,且二进制文件所在目录已加入$PATH环境变量。 - 确认所有续行用的
\后无多余空格。
内容的提问来源于stack exchange,提问作者Maana
相关产品推荐
相关产品推荐

