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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值