golang中protocolbuff的使用

protocolbuff是Google推出的開源序列化協議,幾乎支持市面上全部主流語言。用做服務器與服務器或者客戶端與服務器的網絡傳輸協議再合適不過了。簡單寫個demo。
項目結構:git

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

配置協議:
protocol/protocol.protogithub

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查看。golang

main/main.goshell

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網絡

相關文章
相關標籤/搜索