ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> 各服务端之间的通讯经常会用到protobuf,因为它比json这些更加的快速高效 [TOC] ## 安装编译器 ### 安装protoc编译器 > 可在https://github.com/protocolbuffers/protobuf/releases 下载最新安装包 ~~~ // 请自行将zip转换成tar.gz wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.2/protoc-3.11.2-linux-x86_64.zip tar zxvf protoc-3.11.2-linux-x86_64.tar.gz ~~~ > 配置环境变量 ~~~ vim ~/.bash_profile // 将/opt/protoc/bin加入到环境变量中 // 将go 安装的bin插件配置到环境变量中,可通过go env查看GOPATH=/root/go/,如 /root/go/bin // 如 PATH=$PATH:$HOME/bin:/opt/protoc/bin:/opt/go/bin:/root/go/bin source ~/.bash_profile ~~~ ### go 安装编译器插件 > 此处go的安装步骤过滤,可参考go的安装篇 > 安装执行可以安装go的国内镜像,这样安装插件更加快速稳定 ~~~ # 启用 Go Modules 功能 go env -w GO111MODULE=on # 配置镜像 go env -w GOPROXY=https://goproxy.cn # 查看是否生效 go env | grep GOPROXY ~~~ > 安装编译器插件 ~~~ go get -u github.com/golang/protobuf/protoc-gen-go ~~~ ## 创建pb测试文件 (test.proto) > 头部需指定是proto2还是proto3,有些第三方提供的是没有包含,需要显示指定 > vim /opt/pbtest/test.proto ~~~ //syntax = "proto2"; syntax = "proto3"; package myapi; // 字段都是用1,2,3这样的方式进行索引标识,等转换成PHP的类的时候,通过getXXFiled()的时候,则是根据这个索引标识进行获取 message Person { int32 id = 1; string name = 2; string email = 3; double money = 4; bool is_rich = 5; } message player_login { int32 user_id = 1; string token = 2; }; ~~~ > 当前目录执行:`protoc --go_out=. *.proto`即可生成对应的go执行文件 ## 进行代码测试 ~~~ package main import ( "fmt" "github.com/golang/protobuf/proto" "websocket_test/myapi" ) func main() { person := &myapi.Person{} person.Id = 112 person.Name = "www" person.Email = "www@qq.com" person.Money = 11 person.IsRich = true fmt.Println("Students信息为:",person) // 序列化 buffer, _ := proto.Marshal(person) fmt.Println("序列化之后的信息为:",buffer) // 反序列化 data:=&myapi.Person{} proto.Unmarshal(buffer,data) fmt.Println("反序列化之后的信息为:",data) } ~~~