go 使用 proto
时间: 2023-07-22 22:05:56 浏览: 100
在 Go 中使用 Protocol Buffers(简称 proto)可以通过以下步骤进行:
1. 安装 protoc 编译器:Protocol Buffers 使用 protoc 编译器将 .proto 文件编译成 Go 代码。你可以从 [Protocol Buffers GitHub 仓库](https://github.com/protocolbuffers/protobuf/releases) 下载适合你操作系统的 protoc 编译器,并将其添加到系统 PATH 环境变量中。
2. 编写 .proto 文件:创建一个名为 example.proto 的文本文件,并使用 Protocol Buffers 的语法定义消息结构和服务。
示例 example.proto 文件:
```protobuf
syntax = "proto3";
package example;
message Person {
string name = 1;
int32 age = 2;
repeated string hobbies = 3;
}
service Greeting {
rpc SayHello (Person) returns (Person);
}
```
3. 生成 Go 代码:使用 protoc 编译器将 .proto 文件生成 Go 代码。在终端中运行以下命令:
```shell
protoc --go_out=. example.proto
```
这将在当前目录下生成一个 example.pb.go 文件,其中包含了根据 .proto 文件生成的 Go 结构体和服务代码。
4. 在 Go 代码中使用生成的代码:在你的 Go 代码中导入生成的代码文件,并使用其中定义的结构体和服务进行编程。
示例 Go 代码:
```go
package main
import (
"fmt"
"log"
example "path/to/generated/code" // 导入生成的代码包
"google.golang.org/protobuf/proto"
)
func main() {
person := &example.Person{
Name: "John",
Age: 25,
Hobbies: []string{"reading", "coding"},
}
data, err := proto.Marshal(person)
if err != nil {
log.Fatal(err)
}
// 在这里可以将 data 发送给其他地方进行传输或存储
newPerson := &example.Person{}
err = proto.Unmarshal(data, newPerson)
if err != nil {
log.Fatal(err)
}
fmt.Println(newPerson.GetName()) // 输出:John
}
```
以上就是使用 Protocol Buffers 在 Go 中的基本步骤。你可以根据自己的需求定义更复杂的消息结构和服务,并使用生成的 Go 代码进行序列化、反序列化等操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)