go使用protobuf
首先安装go:就不说了,随意百度即可,或者参考我的,https://blog.csdn.net/u013755520/article/details/89031598末尾有安装go的方式;
安装protobuf 和go的调用接口,参考我的:https://blog.csdn.net/u013755520/article/details/91375830 ;
protobuf作用,序列化对象,把[]byte 变成:obj {各种属性类型};这个对象里可以有任意类型;
类比:https://blog.csdn.net/u013755520/article/details/90546726 binary包,把[]byte 变成{uint32 uint32 []byte }对象,这个对象内只有基本类型;
protobuf和bianry包都属于encoding的范畴。
1.protobuf语法
1.1 消息类型
1.2 数据类型
2.使用protobuf
2.1 按照语法在一个目录比如 proto/ 下编写xx.proto文件
[code]syntax = "proto3"; package pb; message Person { string name = 1; int32 age = 2; repeated string emails = 3; repeated string phones = 4; } message PhoneNumber { string number = 1; PhoneType type = 2; } enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; }
2.2 编译:cd 到proto/目录下面,执行以下命令
protoc --go_out=./ *.proto
就会在当前目录下,根据当前目录的xx.proto文件,生成xx.pd.go文件;这个文件里的每一个go结构体,都实现了proto.Message接口,可是我不知道为啥在goland里却没有提示???待研究
2.3 在程序中使用xx.pb.go文件
也就是说,直接在程序中,为pb.go中的结构体开辟好空间,通过proto.Marshal就可以直接把[]byte 转成pb.go的obj了;
反之,直接在程序中就可以通过 proto.Unmashal 就可以把pb.go的obj转化成[]byte了
[code]package main import ( "fmt" "github.com/micro/protobuf/proto" pb "rpc/proto" ) func main(){ person := &pb.Person{ Name:"yz", Age:11, Emails:[]string{"782365461@qq.com","123456@163.com"}, Phones:[]*pb.PhoneNumber{ &pb.PhoneNumber{ Number:"123456", Type:pb.PhoneType_HOME, }, &pb.PhoneNumber{ Number:"123456", Type:pb.PhoneType_MOBILE, }, &pb.PhoneNumber{ Number:"123456", Type:pb.PhoneType_WORK, }, }, } //marshal: obj---[]byte data,err := proto.Marshal(person) if err != nil { fmt.Println(err) } //unmarshal : []byte---obj newPersonObj := &pb.Person{} err = proto.Unmarshal(data,newPersonObj) if err != nil { fmt.Println(err) } fmt.Println(newPersonObj) }
- Go实战--golang中使用gRPC和Protobuf实现高性能api(golang/protobuf、google.golang.org/grpc)
- go-gRPC(基于http/2-数据传输是protobuf)的使用
- 如何在Go中使用Protobuf
- go语言使用protobuf与c++做数据通信。
- Go实战--go中使用google/protobuf(The way to go)
- 在go语言中安装与使用protobuf的方法详解
- protobuf介绍以及使用方法用例
- Python下使用protobuf
- Protobuf在Python中的使用
- protobuf使用和教程
- Windows下编译Google.Protobuf在Qt(C++)中使用与Unity3d(C#)交互
- Netty与Google的protobuf使用
- protobuf java版使用过程
- protobuf 系列 ---------下载、编译与使用
- 高性能序列化工具Google Protobuf的使用
- Unity3D 使用 TCP/IP 协议,传递 protocol buffer 消息( protobuf-net
- unity中使用protobuf(兼容ios平台)
- 在cocos creator中使用protobufjs(二)
- java序列化/反序列化之xml、protobuf、protostuff 的比较与使用例子
- Centos6.4下安装protobuf及简单使用