安装使用protobuf,使用go语言生成proto文件
时间: 2023-11-01 15:55:17 浏览: 355
proto文件中导入其他proto文件demo
安装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语言支持。
阅读全文