golang中protocolbuff的使用

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

    原文作者:Cedrus
    原文地址: https://segmentfault.com/a/1190000012799361
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞