找回密码
 立即注册
查看: 489|回复: 0

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

[复制链接]
发表于 2021-12-16 19:34 | 显示全部楼层 |阅读模式

  • 下载 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 为什么不起作用,没找到相关说明,懒得找了~
随手记~
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-14 22:21 , Processed in 0.364218 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表