找回密码
 立即注册
查看: 396|回复: 0

Golang Protobuf 安装并简单测试

[复制链接]
发表于 2022-1-11 14:07 | 显示全部楼层 |阅读模式
protoc和protoc-go-gen 可以使用我云盘分享的安装包,拷贝到自己的可执行目录下测试, 也可以自己下载编译安装
两种方式如下
1. 直接使用安装包
云盘分享地址:  链接:https://pan.baidu.com/s/1OuqIr3QqBMoDdn8O7fGR-w
提取码:t8er

image.png

2. 自己编译安装

安装protoc


    打开 https://github.com/protocolbuffers/protobuf/releases

    下载对应的安装包


    image.png


  • 解压并拷贝protoc到可执行目录下
    如/usr/bin/下
    执行protoc, 能看到输出信息表示成功
安装protoc-go-gen

git clone https://github.com/golang/protobuf.gitcd protoc-gen-go/// 编译安装 protoc-gen-go到$GOPATH/bin目录下go install3. 代码测试

编写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 mainimport (    "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}
至此成功

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-14 15:46 , Processed in 0.134847 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表