golang中protocolbuff的使用
Cedrus · · 2283 次点击 · · 开始浏览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
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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