美文网首页
Golang Protobuf 安装并简单测试

Golang Protobuf 安装并简单测试

作者: 其实我很dou | 来源:发表于2022-01-11 12:12 被阅读0次

protoc和protoc-go-gen 可以使用我云盘分享的安装包,拷贝到自己的可执行目录下测试, 也可以自己下载编译安装
两种方式如下

1. 直接使用安装包

云盘分享地址: 链接:https://pan.baidu.com/s/1OuqIr3QqBMoDdn8O7fGR-w
提取码:t8er

image.png

2. 自己编译安装

安装protoc

安装protoc-go-gen

git clone https://github.com/golang/protobuf.git
cd protoc-gen-go/
// 编译安装 protoc-gen-go到$GOPATH/bin目录下
go install

3. 代码测试

编写proto文件

代码见 https://gitee.com/hufengjiu/go-zinx.git

  • 新建项目目录如下


    image.png
  • 新建person.proto文件
syntax = "proto3";

package pb;

option go_package = "./mmo_game/pb"; // 生成文件所在目录

//message为关键字,作用为定义一种消息类型
message Person {
    string name = 1; //姓名
    int32 age = 2; //年龄
    repeated string emails = 3; //电子邮件(repeated表示字段允许重复)
    repeated PhoneNumber phones = 4; //手机号
}

//enum为关键字,作用为定义一种枚举类型
enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
}

//message为关键字,作用为定义一种消息类型可以被另外的消息类型嵌套使用
message PhoneNumber {
    string number = 1;
    PhoneType type = 2;
}

  • 在项目根目录执行命令
protoc -I ./  --go_out=./ ./mmo_game/pb/*.proto
将会生成person.pb.go文件 image.png

编写main文件进行测试

image.png
  • 执行 go get -v -u github.com/golang/protobuf/protoc-gen-go安装依赖包
  • 编写test_person.go文件
package main

import (
    "fmt"
    "gitee.com/hufengjiu/go-zinx/mmo_game/pb"
    "github.com/golang/protobuf/proto"
)

func main() {

    person := &pb.Person{
        Name:   "小明",
        Age:    16,
        Emails: []string{"1234@qq.com", "5678@qq.com"},
        Phones: []*pb.PhoneNumber{
            &pb.PhoneNumber{
                Number: "13113111311",
                Type:   pb.PhoneType_MOBILE,
            },
            &pb.PhoneNumber{
                Number: "14141444144",
                Type:   pb.PhoneType_HOME,
            },
            &pb.PhoneNumber{
                Number: "19191919191",
                Type:   pb.PhoneType_WORK,
            },
        },
    }

    data, err := proto.Marshal(person)
    if err != nil {
        fmt.Println("marshal err:", err)
    }

    newPerson := &pb.Person{}
    err = proto.Unmarshal(data, newPerson)
    if err != nil {
        fmt.Println("unmarshal err:", err)
    }

    fmt.Println(person)
    fmt.Println(newPerson)

}

  • 运行测试 go run test_person.go
    结果
name:"小明" age:16 emails:"1234@qq.com" emails:"5678@qq.com" phones:{number:"13113111311"} phones:{number:"14141444144" type:HOME} phones:{number:"19191919191" type:WORK}
name:"小明" age:16 emails:"1234@qq.com" emails:"5678@qq.com" phones:{number:"13113111311"} phones:{number:"14141444144" type:HOME} phones:{number:"19191919191" type:WORK}

至此成功

相关文章

网友评论

      本文标题:Golang Protobuf 安装并简单测试

      本文链接:https://www.haomeiwen.com/subject/agsbcrtx.html