开发学院,分享开发教程和最新动态
章节列表 什么是ProtobufProtobuf3 定义数据类型Protobuf3 标量值类型Protobuf3 缺省值Protobuf3 枚举Protobuf3 使用其他消息类型Protobuf3 嵌套类型Protobuf3 更新消息类型Protobuf3 未知字段Protobuf3 Any类型Protobuf3 OneofProtobuf3 MapsProtobuf3 包Protobuf3 定义服务Protobuf3 JSON映射Protobuf3 可选项Protobuf3 生成属于自己的类Protobuf 风格指南Protobuf 编码(1)Protobuf 编码(2)Protobuf 编码(3)Protobuf 技术Protocol Buffer C++实例教程: 为什么使用Protocol Buffer?Protocol Buffer C++实例教程: 定义协议格式Protocol Buffer C++实例教程: 编译Protocol BufferProtocol Buffer C++实例教程: Protocol Buffer APIProtocol Buffer C++实例教程: 发送消息Protocol Buffer C++实例教程: 读取消息Protocol Buffer C++实例教程: 扩展Protocol BufferProtocol Buffer C++实例教程: 优化技巧和高级用法Protocol Buffer C#实例教程: 前言Protocol Buffer C#实例教程:定义协议格式Protocol Buffer C#实例教程:编译Protocol Buffer Protocol Buffer C#实例教程:解析和序列化Protocol Buffer Go实例教程:前言Protocol Buffer Go实例教程:定义协议格式Protocol Buffer Go实例教程:编译Protocol BufferProtocol Buffer Go实例教程:读写消息Protocol Buffer JAVA实例教程:前言Protocol Buffer JAVA实例教程:定义协议格式Protocol Buffer JAVA实例教程:编译Protocol BufferProtocol Buffer JAVA实例教程:Protocol Buffer APIProtocol Buffer JAVA实例教程:写消息Protocol Buffer JAVA实例教程:读消息Protocol Buffer JAVA实例教程:扩展Protocol BufferProtocol Buffer Python实例教程:前言Protocol Buffer Python实例教程:定义消息格式Protocol Buffer Python实例教程:编译Protocol BufferProtocol Buffer Python实例教程:Protocol Buffer APIProtocol Buffer Python实例教程:写消息Protocol Buffer Python实例教程:读取MessageProtocol Buffer Python实例教程:扩展Protocol Buffer

Protocol Buffer Go实例教程:编译Protocol Buffer

  现在你有了一个.proto文件,你需要做的下一件事就是生成你需要读写地址簿(以及个人和电话号码)信息的类。为此,您需要在您的.proto文件上运行Protocol Buffer编译器:

  如果您尚未安装编译器,请下载软件包,并按照自述文件中的说明操作。

  运行以下命令安装Go语言的Protocol Buffer插件:

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

  编译器插件protocol-gen-go将安装在$GOBIN中,默认为$GOPATH/bin。协议编译器协议必须在$PATH中找到它。

  现在运行编译器,指定源目录(您的应用程序的源代码所在的位置——如果不提供值,则使用当前目录)、目标目录(您希望生成的代码所在的位置;通常与$SRC_DIR相同),以及到您的. proto的路径,下面是命令:

protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/addressbook.proto

  因为您想要Go 类,所以使用了 --go_out选项——其他受支持的语言也提供了类似的选项。

  这会生成addressbook.pb.go到指定的目标目录。

Protocol Buffer API

  生成addressbook.pb.go可为您提供以下有用类型:

  •   带有People字段的通讯簿结构。

  •   包含姓名、身份证、电子邮件和电话字段的Person结构。

  •   带有数字和类型字段的Person_PhoneNumber结构。

  •   Person_PhoneType类型和为Person.PhoneType枚举中的每个值定义的值。

  您可以阅读更多关于Go生成代码指南中生成的具体内容的详细信息,但是在大多数情况下,您可以将它们视为非常普通的Go类型。

  下面是list_people命令单元测试中的一个例子,演示了如何创建一个Person实例:

p := pb.Person{
        Id:    1234,
        Name:  "John Doe",
        Email: "jdoe@example.com",
        Phones: []*pb.Person_PhoneNumber{
                {Number: "555-4321", Type: pb.Person_HOME},
        },
}