RedZero9 发表于 2021-12-16 19:34

Windows 使用 protoc 编译 Go 语言的 protobuf 文件


[*]下载 protoc 编译器,选择你喜欢的版本


[*]下载后将可执行文件放置在 PATH 的某一个目录里面以便命令行能访问到
[*]下载 protoc 的 go 语言插件,执行命令
go get -u github.com/golang/protobuf/protoc-gen-go或者
go install github.com/golang/protobuf/protoc-gen-go@latest // go 1.16+

[*]检查 GOPATH 是否存在,GOPATH 中是否已经通过上一步安装了 protoc-gen-go 的可执行文件
[*]找个目录,创建 .proto 文件
syntax = "proto3";

package main;

message String {
    string value = 1;
}

[*]在目录下的命令行执行
protoc --go_out=./ hello.proto

[*]报错了,惊不惊喜,意不意外(protoc 3.10 版本后可能会报此错误)
$ protoc --go_out=./ hello.proto
protoc-gen-go: unable to determine Go import path for "hello.proto"

Please specify either:
         a "go_package" option in the .proto source file, or
         a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.在 .proto 文件中添加 go_package 选项
option go_package=".;protocol";go_package 选项里面可根据分号写入两个选项参数
分号前是输出的 .pb.go 文件的路径,路径不存在会自动创建
分号后是输出的 .pb.go 文件的包名
最终 .proto 文件格式为
syntax = "proto3";

option go_package="../protocol;protocol";

package main;

message String {
    string value = 1;
}没错,外面的 go_out 选项指定的路径貌似没什么用处,所以直接写一个最简单的就行了,但是这个选项必须存在
至于 "M" argument 为什么不起作用,没找到相关说明,懒得找了~
随手记~
页: [1]
查看完整版本: Windows 使用 protoc 编译 Go 语言的 protobuf 文件