golang中protocolbuff的使用
发布时间:2020-12-16 09:39:54 所属栏目:大数据 来源:网络整理
导读:protocolbuff是Google推出的开源序列化协议,几乎支持市面上所有主流语言。用作服务器与服务器或者客户端与服务器的网络传输协议再合适不过了。简单写个demo。 项目结构: ProtocolBuff ----Makefile ----src ----github.com/golang/protobuf ----main ----p
protocolbuff是Google推出的开源序列化协议,几乎支持市面上所有主流语言。用作服务器与服务器或者客户端与服务器的网络传输协议再合适不过了。简单写个demo。 ProtocolBuff ----Makefile ----src ----github.com/golang/protobuf ----main ----protocol 配置协议: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |