proto生成go文件

本文介绍了如何安装protoc工具以及protoc-gen-go插件,以生成Go语言的protobuf代码。首先,从GitHub releases下载并安装protoc,然后将其bin目录添加到环境变量。接着,通过Go命令下载protoc-gen-go,生成的exe文件放置于GOPATH/bin。使用protoc命令结合protoc-gen-go生成Go文件,如`protoc --go_out=. person.proto`。如果遇到`proto.ProtoPackageIsVersion3`错误,可能是因为protoc-gen-go版本不匹配,可通过切换版本解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装protoc工具

  1. 下载protoc

下载地址:https://github.com/protocolbuffers/protobuf/releases

获取 Protobuf 编译器 protoc

 解压,把bin目录下的protoc复制到GOPATH/bin下,GOPATH/bin加入环境变量

    2. 下载protoc-gen-go

       下载命令:

go get -d -u github.com/golang/protobuf/protoc-gen-go

如果成功,会在GOPATH/bin下生成protoc-gen-go.exe文件

 

3.  生成go文件

命令:protoc --go_out=生成go文件的目录 proto文件

例如:protoc --go_out=. person.proto  就会生成person.pb.go文件

 

 

编译程序时,可能会报错:

undefined: proto.ProtoPackageIsVersion3

 

是因为protoc-gen-go版本不对,需要切换下版本,切换的方法如下:


cd ~/protobuf/protoc-gen-go
git checkout tags/v1.2.0 -b v1.2.0
go install github.com/golang/protobuf/protoc-gen-go

 

参考:https://www.cnblogs.com/jkko123/p/7161843.html

 

 

 

 

 

 

 

链接:https://www.jianshu.com/p/33afaa670728

安装protobuf 1. 下载protobuf编译器:https://github.com/protocolbuffers/protobuf/releases 2. 安装protobuf编译器: ``` $ tar -xzvf protobuf-3.15.6.tar.gz $ cd protobuf-3.15.6/ $ ./configure $ make $ sudo make install $ sudo ldconfig ``` 3. 安装protobuf的Go语言支持: ``` $ go get github.com/golang/protobuf/protoc-gen-go ``` 该命令会从GitHub上下载并编译出protoc-gen-go可执行文件,该文件是一个protobuf插件,用于将proto文件生成Go语言代码。 使用protobuf 1. 编写proto文件 ```protobuf syntax = "proto3"; package example; message Person { string name = 1; int32 age = 2; repeated string hobbies = 3; } ``` 2. 使用protoc命令生成Go语言代码 ``` $ protoc --go_out=. example.proto ``` 该命令会在当前目录下生成example.pb.go文件,其中包含了protobuf定义的Person类型的Go语言结构体。 3. 在Go语言程序中使用protobuf ```go package main import ( "fmt" "example" "github.com/golang/protobuf/proto" ) func main() { p := &example.Person{ Name: "Alice", Age: 20, Hobbies: []string{"swimming", "reading"}, } data, err := proto.Marshal(p) if err != nil { fmt.Println("marshal error:", err) return } p2 := &example.Person{} err = proto.Unmarshal(data, p2) if err != nil { fmt.Println("unmarshal error:", err) return } fmt.Println("p2:", p2) } ``` 该程序使用protobuf将一个Person对象编码为二进制数据,然后解码成另一个Person对象。注意,该程序需要引入github.com/golang/protobuf/proto包,该包提供了protobuf的Go语言支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值