Protocol Buffers
-
下载安装
-
https://github.com/protocolbuffers/protobuf
-
将下载的文件解压缩后放在C盘下的Program File下,并设置bin中protoc.exe的环境变量
-
-
语法
-
syntax = "proto3"; // 使用版本为proto3,默认为proto2,第一行不能为空且不能为注释 option go_package = "./;blog"; package blog; message User{ // 定义消息 int32 uid =1; string uname = 2; int32 age = 3; } message Article{ int32 aid = 1; string title = 2; int32 views = 3; } service UserService { // 定义服务 rpc login(User) returns(User); }
-
-
序列化和反序列化
-
proto.marshal()/unmarshal()
-
-
json
和protobuf
相互转换-
// go get google.golang.org/protobuf/encoding/protojson package main import ( "fmt" "proto/blog" "google.golang.org/protobuf/encoding/protojson" ) func main() { user := blog.User{ Uid: 2, Uname: "fyq", Age: 20, } // message -> json jsonString := protojson.Format(user.ProtoReflect().Interface()) fmt.Printf("jsonString: %v\n", jsonString) // json -> message u := user.ProtoReflect().Interface() protojson.Unmarshal([]byte(jsonString), u) fmt.Printf("u: %v\n", u) }
-
-
题目
-
protocol buffers目的
- 在不同语言间传递数据,同json、xml一样,比json、xml更加轻便高效
-
如何将
proto.proto
编译为Go代码-
protoc --go_out=. person.proto
-
-