1.下载对应zip包, 解压 https://github.com/protocolbuffers/protobuf/releases-2. 配置环境变量: 在用户系统变量Path最后添加刚刚解压的bin目录,例如: G:\soft\protobuf\bin-3. 验证是否配置正确: 打开终端,输...

- 1.下载对应zip包, 解压
https://github.com/protocolbuffers/protobuf/releases
-2. 配置环境变量:
在用户系统变量Path最后添加刚刚解压的bin目录,例如: G:\soft\protobuf\bin
-3. 验证是否配置正确:
打开终端,输入protoc,如果输出下面内容,代码配置成功。
-
4.安装protoc-gen-go库
在此之前要设置go的环境变量: -
GO111MODULE=on
-
GOPROXY=https://goproxy.cn,direct
然后:
go get github.com/golang/protobuf/protoc-gen-go -
5.定义test.proto文件, 输入下面数据 :
syntax = "proto3"; //proto版本信息
package test; //定义属于哪个包
//如果报waring就加上这个,不加也能成功
// ./aaa - 表示生成的go文件的存放地址,会自动生成目录的
// test - 表示生成的go文件所属的包名
option go_package = "./aaa;test";
//message是固定格式,表示消息, Order是数据对象的名
// required - 必填项, optional - 选填项, 这两个是proto2的参数,在proto3取消了
// = 1, = 2, = 3是字段的顺序, 为了保证数据顺序的统一
message Order{
int32 order_id = 1;
int64 num = 2;
name = 3;
}
-
6.进入test.proto所在路径, 编译proto文件
.指的是编译后的文件路径, 这里使用当前路径就行,具体路径在proto文件里面定义了
test.proto指要编译的文件
注意 = 后面不能有空格
protoc --go_out =. test.proto -
7.使用上面生成的 test.pb.go文件进行数据封包和拆包
func main(){
fmt.Println("hey_wei_gou")
//创建消息对象
msg_test := &test.Order{
OrderId: *proto.Int32(12),
Num: *proto.Int64(22),
Name: *proto.String("fuck"),
}
//序列化
msgDataEncoding,err := proto.Marshal(msg_test)
if err!=nil{
fmt.Println("err:",err.Error())
panic(err)
return
}
//反序列化
msgEmpty := test.Order{}
err = proto.Unmarshal(msgDataEncoding,&msgEmpty)
if err!=nil{
fmt.Println("err:",err.Error())
panic(err)
return
}
fmt.Println("order_id:",msgEmpty.GetOrderId())
fmt.Println("num:",msgEmpty.GetNum())
fmt.Println("name:",msgEmpty.GetName())
}
本文标题为:golang-protobuf配置和使用


基础教程推荐
- Swift初始化器与可选链的使用方法介绍 2023-07-08
- 浅析ELF转二进制允许把 Binary 文件加载到任意位置 2023-07-06
- win10下使用virtualbox + vagrant配置ruby开发机环境 2023-07-23
- R语言绘制折线图实例分析 2022-11-21
- ruby-on-rails-为使用Rails 4,nginx和乘客的用户设置自定义域 2023-09-21
- ruby on rails validates 2023-09-22
- Swift中重写和重载的使用与对比总结 2023-07-05
- Ruby3多线程并行Ractor使用方法详解 2023-07-23
- R语言-修改(替换)因子变量的元素操作 2022-11-26
- R语言 ggplot2改变柱状图的顺序操作 2022-11-17