golang中protocolbuff的使用

Cedrus · · 1794 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

protocolbuff是Google推出的开源序列化协议,几乎支持市面上所有主流语言。用作服务器与服务器或者客户端与服务器的网络传输协议再合适不过了。简单写个demo。
项目结构:

ProtocolBuff
    ----Makefile
    ----src
           ----github.com/golang/protobuf
           ----main
           ----protocol

配置协议:
protocol/protocol.proto

package protocol;

enum ItemType
{
        USERITEM  = 1;
        EQUIPMENT = 2;
};
message ItemInfo
{
        optional int32 ID = 1;
        optional int32 Type = 2;
        optional string Name = 3;
        optional int32 Amount = 4;
};

执行protoc --go_out=./ protocol.proto自动生成protocol.pb.go,生成目录为当前目录。protoc支持生成多种语言,具体用protoc -h查看。

main/main.go

package main

import (
    "github.com/golang/protobuf/proto"
    "fmt"
    "protocol"
)

func main() {
    item := protocol.ItemInfo{
        ID : proto.Int32(10),
        Type : proto.Int32(1),
        Name : proto.String("item_0"),
        Amount: proto.Int32(99),
    }

    data := EncodeMsg(&item)//封包

    fmt.Printf("Encode Data %v \n", data)

    res := DecodeMsg(data)//解包

    fmt.Printf("Decode Data %v \n", res.String())
}

func EncodeMsg(pb proto.Message) []byte{
    data, err := proto.Marshal(pb)
    if err != nil{
        fmt.Errorf("%v \n",err.Error())
    }

    return data
}

func DecodeMsg(data []byte)  (result protocol.ItemInfo){

    proto.Unmarshal(data, &result)

    return
}

Makefile

GOPATH := $(shell pwd)
all:
        GOPATH=${GOPATH} go install main

make以后,bin目录下会生成可执行文件main,执行得到结果:
Encode Data [8 10 16 1 26 6 105 116 101 109 95 48 32 99]
Decode Data ID:10 Type:1 Name:"item_0" Amount:99


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:Cedrus

查看原文:golang中protocolbuff的使用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1794 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传