Go语言使用Protocol Buffer的小例子
2015-03-07 20:50
525 查看
Protocol Buffer与Golang出自同门。Golang对其的支持包在https://github.com/golang/protobuf 下。
弄个小例子.
1. 创建proto文件usermsg.proto
protoc --go_out=. usermsg.proto
可得usermsg.pb.go文件.
3. 用Golang调用.pb.go文件测试一下:
Java的可用" protoc --java_out=. usermsg.proto"生成java_package指定的目录及java_outer_classname 对应的文件,与Golang做对应测试,在这就不弄了.
MAIL: xcl_168@aliyun.com
BLOG:http://blog.csdn.net/xcl168
弄个小例子.
1. 创建proto文件usermsg.proto
package pfmsg; option java_package = "com.example.pfmsg"; option java_outer_classname = "UserMessage"; enum UserStatus { OFFLINE = 0; ONLINE = 1; } message UserInfo { required int32 id = 1; optional string name = 2; optional UserStatus status = 3 [default = OFFLINE]; }2.用protoc生成相关文件:
protoc --go_out=. usermsg.proto
可得usermsg.pb.go文件.
3. 用Golang调用.pb.go文件测试一下:
package main //Protocol Buffer例子 //author: Xiong Chuan Liang //date: 2015-3-7 import ( "fmt" "github.com/golang/protobuf/proto" "pfmsg" ) func main() { //编码 data, err := Marshal() if err != nil { fmt.Println("Marshal() error: ", err) } fmt.Println("Marshal:\n", data) //解码 Unmarshal(data) } func Marshal() ([]byte, error) { var status pfmsg.UserStatus status = pfmsg.UserStatus_ONLINE userInfo := &pfmsg.UserInfo{ Id: proto.Int32(10), Name: proto.String("XCL"), Status: &status, } return proto.Marshal(userInfo) } func Unmarshal(data []byte) { userInfo := &pfmsg.UserInfo{} err := proto.Unmarshal(data, userInfo) if err != nil { fmt.Println("Unmarshal() error: ", err) } fmt.Println("Unmarshal()\n userInfo:", userInfo) } /* 运行结果: Marshal: [8 10 18 3 88 67 76 24 1] Unmarshal() userInfo: id:10 name:"XCL" status:ONLINE */可以看到, Protocol Buffer与Golang两者相处蛮愉快的。
Java的可用" protoc --java_out=. usermsg.proto"生成java_package指定的目录及java_outer_classname 对应的文件,与Golang做对应测试,在这就不弄了.
MAIL: xcl_168@aliyun.com
BLOG:http://blog.csdn.net/xcl168
相关文章推荐
- gRPC的Go语言使用例子
- golang实战使用gin+xorm搭建go语言web框架restgo详解10 使用restgo搭建后台管理系统
- 使用swig工具为go语言与c++进行交互
- Go语言中使用flag包对命令行进行参数解析的方法
- Go语言实战 - 使用SendCloud群发邮件
- go语言快速入门:数据类型使用例(4)
- 25.笔记go语言——PostgrelSQL数据库使用
- 如何在 Go 语言中使用 Redis 连接池-Radix.v2
- GO语言使用gopsutil包进行机器信息采集
- 26.笔记go语言——beedb库使用
- go语言defer使用 .
- Go语言中函数的定义与使用
- GO语言JAVA语言实现的AES/CFB/256位的加密解密例子
- go语言defer使用
- go语言使用pipe读取子进程标准输出的方法
- 为什么要使用 Go 语言,Go 语言的优势在哪里?
- go语言闭包,匿名函数,变量使用
- GO语言常用库与使用goglang IDE编写GO项目
- 使用GO语言开发 Redis数据监控程序
- 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE